App-Installationsort

Ab API-Level 8 können Sie zulassen, dass Ihre Anwendung auf dem externen Speicher (z. B. der SD-Karte des Geräts) installiert wird. Dies ist eine optionale Funktion, die Sie für Ihre App mit dem Manifestattribut android:installLocation deklarieren können. Wenn Sie dieses Attribut nicht angeben, wird Ihre Anwendung nur im internen Speicher installiert und kann nicht in den externen Speicher verschoben werden.

Damit das System deine App im externen Speicher installieren kann, ändere die Manifestdatei so, dass das Attribut android:installLocation im Element <manifest> enthalten ist und entweder „preferExternal“ oder „auto“ lautet. Beispiel:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    ... >

Wenn Sie „preferExternal“ deklarieren, wird die Installation Ihrer Anwendung im externen Speicher angefordert. Das System kann jedoch nicht garantieren, dass Ihre Anwendung auf dem externen Speicher installiert wird. Wenn der externe Speicher voll ist, installiert das System ihn auf dem internen Speicher. Der Nutzer kann Ihre Anwendung auch zwischen den beiden Speicherorten verschieben.

Wenn Sie "auto" deklarieren, geben Sie damit an, dass Ihre Anwendung möglicherweise im externen Speicher installiert wird, Sie haben jedoch keinen bevorzugten Installationsort festgelegt. Das System entscheidet anhand verschiedener Faktoren, wo Ihre Anwendung installiert wird. Der Nutzer kann Ihre Anwendung auch zwischen den beiden Standorten verschieben.

Wenn Ihre Anwendung auf dem externen Speicher installiert ist:

  • Dies hat keine Auswirkungen auf die Anwendungsleistung, solange der externe Speicher auf dem Gerät bereitgestellt ist.
  • Die Datei .apk wird im externen Speicher gespeichert, aber alle privaten Nutzerdaten, Datenbanken, optimierten .dex-Dateien und extrahierter nativer Code werden im internen Gerätespeicher gespeichert.
  • Der eindeutige Container, in dem Ihre Anwendung gespeichert ist, wird mit einem zufällig generierten Schlüssel verschlüsselt, der nur von dem Gerät entschlüsselt werden kann, auf dem sie ursprünglich installiert wurde. Daher funktioniert eine auf einer SD-Karte installierte Anwendung nur mit einem einzigen Gerät.
  • Der Nutzer kann Ihre Anwendung über die Systemeinstellungen in den internen Speicher verschieben.

Warnung:Wenn der Nutzer die Freigabe von Dateien für einen Computer per USB-Massenspeicher aktiviert oder die SD-Karte über die Systemeinstellungen trennt, wird der externe Speicher vom Gerät getrennt und alle Anwendungen, die auf dem externen Speicher ausgeführt werden, werden sofort beendet.

Abwärtskompatibilität

Die Installation Ihrer App auf dem externen Speicher ist eine Funktion, die nur auf Geräten mit API-Level 8 (Android 2.2) oder höher verfügbar ist. Vorhandene Anwendungen, die vor API-Level 8 erstellt wurden, werden immer im internen Speicher installiert und können nicht in den externen Speicher verschoben werden (auch nicht auf Geräten mit API-Level 8). Wenn Ihre Anwendung jedoch ein API-Level von niedriger als 8 unterstützt, können Sie diese Funktion auch für Geräte mit API-Level 8 oder höher unterstützen und trotzdem mit Geräten mit einem API-Level unter 8 kompatibel sein.

So lassen Sie die Installation auf externem Speicher zu und bleiben mit Versionen vor API-Level 8 kompatibel:

  1. Fügen Sie das Attribut android:installLocation mit dem Wert „auto“ oder „preferExternal“ in das Element <manifest> ein.
  2. Lassen Sie das Attribut android:minSdkVersion unverändert (etwa weniger als „8“). Achten Sie außerdem darauf, dass Ihr Anwendungscode nur APIs verwendet, die mit dieser Ebene kompatibel sind.
  3. Ändern Sie Ihr Build-Ziel in API-Level 8, um Ihre Anwendung zu kompilieren. Das ist erforderlich, weil ältere Android-Bibliotheken das Attribut android:installLocation nicht verstehen und deine Anwendung nicht kompilieren, wenn es vorhanden ist.

Bei der Installation Ihrer Anwendung auf einem Gerät mit einem API-Level unter 8 wird das Attribut android:installLocation ignoriert und die Anwendung wird im internen Speicher installiert.

Achtung:Obwohl XML-Markups wie dieses von älteren Plattformen ignoriert werden, müssen Sie darauf achten, in API-Level 8 eingeführte Programmier-APIs nicht zu verwenden, während minSdkVersion kleiner als „8“ ist, es sei denn, Sie führen die erforderlichen Schritte aus, um die Abwärtskompatibilität in Ihrem Code zu gewährleisten.

Anwendungen, die NICHT auf dem externen Speicher installiert werden sollen

Wenn der Nutzer den USB-Massenspeicher die Freigabe von Dateien für seinen Computer aktiviert (oder den externen Speicher anderweitig entkoppelt oder entfernt), werden alle auf dem externen Speicher installierten und derzeit ausgeführten Anwendungen beendet. Das System erkennt die Anwendung praktisch nicht mehr, bis der Massenspeicher deaktiviert und der externe Speicher wieder auf dem Gerät bereitgestellt wird. Abgesehen davon, dass die Anwendung beendet und für den Nutzer nicht mehr verfügbar ist, kann dies einige Arten von Anwendungen erheblich beeinträchtigen. Damit sich Ihre Anwendung konsistent erwartungsgemäß verhält, sollten Sie die Installation der Anwendung auf dem externen Speicher nicht zulassen, wenn sie eine der folgenden Funktionen nutzt. Das liegt an den angegebenen Folgen beim Trennen des externen Speichers:

Dienste
Die laufende Service wird beendet und nicht neu gestartet, wenn der externe Speicher wieder bereitgestellt wird. An diesen Dienst gebundene Anwendungen können sich für den Broadcast-Intent ACTION_EXTERNAL_APPLICATIONS_AVAILABLE registrieren. Dadurch werden alle Anwendungen, die nicht auf einem externen Speicher installiert sind, benachrichtigt, sobald die im externen Speicher installierten Anwendungen wieder für das System verfügbar sind. Nach dem Empfang dieses Broadcasts können Anwendungen versuchen, sich an Ihren Dienst zu binden.
Alarmdienste
Deine bei AlarmManager registrierten Wecker werden abgebrochen. Sie müssen Alarme manuell neu registrieren, wenn externer Speicher wieder bereitgestellt wird.
Eingabemethoden-Engines
Ihre IME wird durch den Standard-IME ersetzt. Wenn der externe Speicher wieder bereitgestellt wird, kann der Nutzer die Systemeinstellungen öffnen, um Ihren IME wieder zu aktivieren.
Live-Hintergründe
Der laufende Live-Hintergrund wird durch den Standard-Live-Hintergrund ersetzt. Wenn der externe Speicher wieder bereitgestellt wird, kann der Nutzer deinen Live-Hintergrund wieder auswählen.
Widgets
Ihr App Widget wird vom Startbildschirm entfernt. Wenn ein externer Speicher wieder bereitgestellt wird, kann der Nutzer das App-Widget erst dann auswählen, wenn das System die Start-App zurückgesetzt hat (in der Regel erst nach einem Neustart des Systems).
Account Manager
Ihre mit AccountManager erstellten Konten werden gelöscht, bis externer Speicher wieder bereitgestellt wird.
Synchronisierungsadapter
Ihr AbstractThreadedSyncAdapter und alle zugehörigen Synchronisierungsfunktionen funktionieren erst, wenn der externe Speicher wieder bereitgestellt wurde.
Geräteadministratoren
Ihr DeviceAdminReceiver und alle zugehörigen Administratorfunktionen werden deaktiviert, was unvorhersehbare Folgen für die Gerätefunktionalität haben kann, die bestehen können, nachdem der externe Speicher wieder bereitgestellt wurde.
Broadcast-Receiver warten auf „Start abgeschlossen“
Das System sendet den ACTION_BOOT_COMPLETED-Broadcast, bevor das externe Speichergerät auf dem Gerät bereitgestellt wird. Wenn Ihre Anwendung auf dem externen Speicher installiert ist, kann sie diesen Broadcast nie empfangen.

Wenn Ihre App eine der oben aufgeführten Funktionen nutzt, sollten Sie die Installation auf einem externen Speicher nicht zulassen. Standardmäßig lässt das System die Installation Ihrer Anwendung auf dem externen Speicher nicht zu. Sie müssen sich also keine Gedanken über Ihre vorhandenen Anwendungen machen. Wenn Sie jedoch sicher sind, dass Ihre Anwendung niemals auf dem externen Speicher installiert werden sollte, sollten Sie dies verdeutlichen, indem Sie android:installLocation mit dem Wert „internalOnly“ deklarieren. Das Standardverhalten wird dadurch zwar nicht geändert, aber es wird ausdrücklich angegeben, dass Ihre Anwendung nur im internen Speicher installiert werden soll. So werden Sie und andere Entwickler daran erinnert, dass diese Entscheidung getroffen wurde.

Anwendungen, die auf dem externen Speicher installiert werden sollen

Einfach ausgedrückt: Alles, was nicht die im vorherigen Abschnitt genannten Funktionen nutzt, ist sicher, wenn es auf einem externen Speicher installiert wird. Große Spiele gehören eher zu den Anwendungen, die die Installation auf externem Speicher ermöglichen sollten, da Spiele in der Regel keine zusätzlichen Dienste bieten, wenn sie inaktiv sind. Wenn der externe Speicher nicht mehr verfügbar ist und ein Spielprozess abgebrochen wird, sollte es keine sichtbaren Auswirkungen geben, sobald der Speicher wieder verfügbar ist und der Nutzer das Spiel neu startet (vorausgesetzt, das Spiel hat seinen Status während des normalen Aktivitätslebenszyklus ordnungsgemäß gespeichert).

Wenn Ihre App mehrere Megabyte für die APK-Datei benötigt, sollten Sie sorgfältig überlegen, ob Sie die Installation der App auf dem externen Speicher aktivieren, damit Nutzer Speicherplatz im internen Speicher erhalten.

Weitere Informationen finden Sie unter <manifest>.