Lokalizacja instalacji aplikacji

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:

  1. Dodaj atrybut android:installLocation o wartości „auto” lub „preferExternal<manifest> .
  2. 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%.
  3. 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ę w ACTION_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>