Począwszy od poziomu interfejsu API poziomu 8, można zezwolić na instalację aplikacji
pamięci zewnętrznej (na przykład karty SD urządzenia). To opcjonalna funkcja, którą możesz zadeklarować
dla aplikacji z atrybutem w pliku manifestu android:installLocation
. Jeśli tak,
nie zadeklaruj tego atrybutu, aplikacja zostanie zainstalowana w pamięci wewnętrznej
i nie można jej przenieść w pamięć zewnętrzną.
Aby umożliwić systemowi zainstalowanie aplikacji w pamięci zewnętrznej, zmodyfikuj
plik manifestu, aby umieścić atrybut android:installLocation
w elemencie <manifest>
,
z wartością „preferExternal
” lub „auto
”. Na przykład:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ... >
Jeśli zadeklarujesz „preferExternal
”, poprosisz o zainstalowanie aplikacji na
pamięci zewnętrznej, ale system nie gwarantuje, że aplikacja zostanie zainstalowana
pamięci zewnętrznej. Jeśli pamięć zewnętrzna jest pełna, system zainstaluje ją w pamięci wewnętrznej.
pamięci masowej. Użytkownik może też przenieść Twoją aplikację między tymi lokalizacjami.
Deklarowanie „auto
” oznacza, że Twoja aplikacja może być zainstalowana
pamięci zewnętrznej, ale nie masz preferencji dotyczących lokalizacji instalacji. System
Decyzja o tym, gdzie ją zainstalować, zależy od kilku czynników. Użytkownik może też przenieść Twoje
między lokalizacjami.
Gdy aplikacja zostanie zainstalowana w pamięci zewnętrznej:
- Nie ma to wpływu na wydajność aplikacji przez długi czas ponieważ pamięć zewnętrzna jest podłączona do urządzenia.
- Plik
.apk
zostanie zapisany w pamięci zewnętrznej, ale wszystkie prywatne dane użytkownika bazy danych, zoptymalizowane pliki.dex
i wyodrębniony kod natywny są zapisywane w pamięci wewnętrznej urządzenia. - Unikalny kontener, w którym jest przechowywana aplikacja, jest szyfrowany losowo który może być odszyfrowany tylko przez urządzenie, na którym został zainstalowany. Oznacza to, że aplikacja zainstalowana na karcie SD działa tylko na jednym urządzeniu.
- Użytkownik może przenieść Twoją aplikację do pamięci wewnętrznej, korzystając z ustawień systemu.
Ostrzeżenie: gdy użytkownik włączy udostępnianie plików za pomocą pamięci masowej USB z komputerem lub odłącza kartę SD w ustawieniach systemowych, pamięć zewnętrzna zostanie odłączona z urządzenia, wraz ze wszystkimi aplikacjami uruchomionymi w tej pamięci zostaną natychmiast zakończone.
Zgodność wsteczna
Instalacja aplikacji w pamięci zewnętrznej jest dostępna tylko na urządzeniach z interfejsem API poziomu 8 (Android 2.2) lub nowszym. aplikacji utworzonych wcześniej. Poziom interfejsu API poziomu 8 jest zawsze instalowany w pamięci wewnętrznej i nie można go przenieść na zewnętrzną (nawet na urządzeniach z interfejsem API poziomu 8). Jeśli jednak Twoja aplikacja jest przeznaczona do obsługi Poziom API niższy niż 8; możesz włączyć obsługę tej funkcji w przypadku urządzeń z poziomem API 8. lub nowszym oraz muszą być zgodne z urządzeniami używającymi poziomu interfejsu API niższego niż 8.
Aby umożliwić instalację w pamięci zewnętrznej i zachowanie zgodności z wersjami starszymi niż interfejs API Poziom 8:
- Dodaj atrybut
android:installLocation
o wartości „auto
” lub „preferExternal
”<manifest>
. - Pozostaw atrybut
android:minSdkVersion
bez zmian (coś mniej niż „8”) i upewnij się, że w kodzie aplikacji używasz tylko interfejsów API zgodnych z tym na poziomie 300%. - Aby skompilować aplikację, zmień cel kompilacji na API poziomu 8. To jest
niezbędna, ponieważ starsze biblioteki Androida nie rozpoznają
android:installLocation
i nie skompiluje aplikacji, jeśli jest dostępny.
Gdy aplikacja jest zainstalowana na urządzeniu z poziomem interfejsu API niższym niż 8, atrybut android:installLocation
jest ignorowany, a aplikacja jest zainstalowana wewnętrznie.
pamięci masowej.
Uwaga: chociaż tego typu znaczniki XML są ignorowane przez
starszych platform, należy uważać, aby nie używać interfejsów API do programowania wprowadzonych w API poziomu 8
podczas gdy wskaźnik minSdkVersion
jest mniejszy niż „8”, chyba że wykonasz czynności niezbędne do
aby zapewnić zgodność wsteczną w kodzie.
Aplikacje, których NIE należy instalować w pamięci zewnętrznej
Gdy użytkownik włączy nośnik USB, aby udostępniać pliki komputerowi (lub w inny sposób). odłącza lub usuwa pamięć zewnętrzną), dowolną aplikację zainstalowane w pamięci zewnętrznej i obecnie uruchomione zostaną przerwane. System zmienia się w praktyce nie będą wiedzieć o aplikacji do czasu wyłączenia pamięci masowej i wyłączenia pamięci zewnętrznej. ponownie zamontować na urządzeniu. Poza zamknięciem aplikacji i udostępnieniem jej użytkownikowi może to spowodować poważne zakłócenia w niektórych zastosowaniach. Aby aplikacja działa zgodnie z oczekiwaniami, nie należy zezwalać aplikacji na zainstalowanej w pamięci zewnętrznej, jeśli korzysta ona z dowolnej z tych funkcji ze względu na konsekwencje odłączenia pamięci zewnętrznej:
- Usługi
- Twoje biegi
Service
to został zatrzymany i nie zostanie ponownie uruchomiony po ponownym podłączeniu pamięci zewnętrznej. Aplikacje powiązane z tą usługą mogą zarejestrować się wACTION_EXTERNAL_APPLICATIONS_AVAILABLE
intencję transmisji, która powiadamia wszystkie aplikacje, które nie instalowane w pamięci zewnętrznej, gdy aplikacje są zainstalowane na pamięć masowa jest ponownie dostępna dla systemu. Po otrzymaniu komunikat, aplikacje mogą próbować powiązać się z Twoją usługą. - Usługi alarmowe
- Twoje alarmy zarejestrowane w aplikacji
AlarmManager
zostaną anulowane. Musisz ręcznie zarejestrować wszystkie alarmy po ponownym podłączeniu pamięci zewnętrznej. - Silniki metody wprowadzania
- Twój IME będzie został zastąpiony domyślnym edytorem IME. Po ponownym podłączeniu pamięci zewnętrznej użytkownik może otworzyć ustawienia systemu , by ponownie włączyć edytor IME.
- Animowane tapety
- Twoja bieżąca animowana tapeta zostanie zastąpiona domyślną animowaną tapetą. Po ponownym podłączeniu pamięci zewnętrznej użytkownik może wybierz ponownie animowaną tapetę.
- Widżety
- Twój widżet aplikacji zostanie usunięty na ekranie głównym. Po ponownym podłączeniu pamięci zewnętrznej widżet aplikacji nie zostanie dostępne dla użytkownika do momentu, aż system zresetuje aplikację ekranu głównego (zwykle ponowne uruchomienie systemu).
- Menedżerowie konta
- Twoje konta utworzone za pomocą usługi
AccountManager
znikną do czy pamięć zewnętrzna jest podłączona do urządzenia. - Zsynchronizuj karty
- Urządzenie
AbstractThreadedSyncAdapter
i wszystkie jego funkcje synchronizacji nie będzie działać, dopóki pamięć zewnętrzna nie zostanie podłączona z powrotem. - Administratorzy urządzeń
- Urządzenie
DeviceAdminReceiver
i wszystkie jego uprawnienia administratora będą zostać wyłączona, co może mieć nieprzewidywalne konsekwencje dla działania urządzenia i może pozostają aktywne po ponownym podłączeniu pamięci zewnętrznej. - Odbiorniki transmisji nasłuchują komunikatu „uruchomienie zostało ukończone”
- System dostarcza komunikat
ACTION_BOOT_COMPLETED
przed podłączeniem pamięci zewnętrznej do urządzenia. Jeśli Twoja aplikacja jest zainstalowana na pamięci zewnętrznej, nie może odebrać tego komunikatu.
Jeśli aplikacja korzysta z którejkolwiek z funkcji wymienionych powyżej, nie zezwalaj na
zainstalować ją w pamięci zewnętrznej. Domyślnie system nie będzie zezwalać na
aplikację instalowaną w pamięci zewnętrznej, więc nie trzeba martwić się o istniejącą
aplikacji. Jeśli jednak masz pewność, że Twoja aplikacja nie powinna być nigdy
pamięci zewnętrznej, musisz to wyraźnie zaznaczyć, zadeklarując android:installLocation
z wartością „internalOnly
”. Chociaż nie oznacza to,
zmienia domyślne zachowanie, zawiera wyraźną informację, że aplikację należy instalować tylko
w pamięci wewnętrznej, oraz przypominamy Tobie i innym deweloperom, że ta decyzja
podjętej decyzji.
Aplikacje, które należy zainstalować w pamięci zewnętrznej
Mówiąc prościej, wszystko, co nie wykorzystuje funkcji wymienionych w poprzedniej sekcji są bezpieczne, gdy zostaną zainstalowane w pamięci zewnętrznej. Duże gry to częściej które powinny umożliwiać instalację w pamięci zewnętrznej, ponieważ gry zwykle świadczenia usług dodatkowych, gdy są nieaktywne. Gdy pamięć zewnętrzna będzie niedostępna, a gra zostanie uruchomiona gdy proces zostanie zatrzymany, nie powinno być żadnych widocznych efektów, gdy pamięć zostanie ponownie dostępna i użytkownik uruchomi grę ponownie (zakładając, że gra prawidłowo zapisał swój stan podczas normalnego Cykl życia aktywności).
Jeśli aplikacja wymaga kilku megabajtów rozmiaru pliku APK, należy zastanowić się, czy włączyć tę aplikację w pamięci zewnętrznej, użytkownicy mogą zaoszczędzić miejsce w pamięci wewnętrznej.
Dodatkowe powiązane informacje znajdziesz tutaj: <manifest>