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 Anwendung mit dem android:installLocation Manifestattribut deklarieren können. Wenn Sie dieses Attribut nicht deklarieren, wird Ihre Anwendung nur auf dem internen Speicher installiert und kann nicht auf den externen Speicher verschoben werden.

Wenn das System Ihre Anwendung auf dem externen Speicher installieren soll, ändern Sie die Manifestdatei so, dass das Attribut android:installLocation im Element <manifest> enthalten ist. Verwenden Sie dabei den Wert "preferExternal" oder "auto". Beispiel:

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

Wenn Sie "preferExternal" deklarieren, fordern Sie an, dass Ihre Anwendung auf dem externen Speicher installiert wird. Das System garantiert jedoch nicht, dass dies geschieht. Wenn der externe Speicher voll ist, installiert das System die Anwendung auf dem internen Speicher. Der Nutzer kann die Anwendung auch zwischen den beiden Speicherorten verschieben.

Wenn Sie "auto" deklarieren, geben Sie an, dass Ihre Anwendung auf dem externen Speicher installiert werden kann, aber Sie haben keine bevorzugte Installationsposition. Das System entscheidet anhand verschiedener Faktoren, wo die Anwendung installiert wird. Der Nutzer kann die Anwendung auch zwischen den beiden Speicherorten verschieben.

Wenn Ihre Anwendung auf dem externen Speicher installiert ist, gilt Folgendes:

  • Die Leistung der Anwendung wird nicht beeinträchtigt, solange der externe Speicher auf dem Gerät bereitgestellt ist.
  • Die Datei .apk wird auf dem externen Speicher gespeichert, alle privaten Nutzerdaten, Datenbanken, optimierten .dex-Dateien und extrahierten nativen Code werden jedoch 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 die Anwendung ursprünglich installiert wurde. Eine auf einer SD-Karte installierte Anwendung funktioniert daher nur auf einem Gerät.
  • Der Nutzer kann die Anwendung über die Systemeinstellungen auf den internen Speicher verschieben.

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

Abwärtskompatibilität

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

So ermöglichen Sie die Installation auf dem externen Speicher und bleiben mit Versionen unter API-Level 8 kompatibel:

  1. Fügen Sie das android:installLocation Attribut mit dem Wert "auto" oder "preferExternal" in das <manifest> Element ein.
  2. Lassen Sie das Attribut android:minSdkVersion unverändert (etwas weniger als „8“) und achten Sie darauf, dass in Ihrem Anwendungscode nur APIs verwendet werden, die mit diesem Level kompatibel sind.
  3. Ändern Sie das Build-Ziel in API-Level 8, um Ihre Anwendung zu kompilieren. Dies ist erforderlich, da ältere Android-Bibliotheken das Attribut android:installLocation nicht verstehen und Ihre Anwendung nicht kompilieren, wenn es vorhanden ist.

Wenn Ihre Anwendung auf einem Gerät mit einem API-Level unter 8 installiert ist, wird das Attribut android:installLocation ignoriert und die Anwendung wird auf dem internen Speicher installiert.

Achtung:Obwohl XML-Markup wie dieses von älteren Plattformen ignoriert wird, dürfen Sie keine Programmier-APIs verwenden, die in API-Level 8 eingeführt wurden, solange minSdkVersion kleiner als „8“ ist. Andernfalls müssen Sie die erforderlichen Maßnahmen ergreifen, um die Abwärtskompatibilität in Ihrem Code zu gewährleisten.

Anwendungen, die NICHT auf dem externen Speicher installiert werden sollten

Wenn der Nutzer den USB-Massenspeicher aktiviert, um Dateien für seinen Computer freizugeben (oder den externen Speicher anderweitig entfernt), wird jede Anwendung, die auf dem externen Speicher installiert ist und derzeit ausgeführt wird, beendet. Das System erkennt die Anwendung erst wieder, wenn der Massenspeicher deaktiviert und der externe Speicher wieder auf dem Gerät bereitgestellt wird. Neben dem Beenden der Anwendung und der Nichtverfügbarkeit für den Nutzer kann dies bei einigen Arten von Anwendungen schwerwiegendere Folgen haben. Damit sich Ihre Anwendung immer wie erwartet verhält, sollten Sie nicht zulassen, dass sie auf dem externen Speicher installiert wird, wenn sie eine der folgenden Funktionen verwendet. Dies liegt an den genannten Folgen, wenn der externe Speicher entfernt wird:

Dienste
Ihr ausgeführter Service wird beendet und nicht neu gestartet, wenn der externe Speicher wieder bereitgestellt wird. Anwendungen, die an diesen Dienst gebunden sind, können sich für den ACTION_EXTERNAL_APPLICATIONS_AVAILABLE Broadcast-Intent registrieren. Dieser benachrichtigt alle Anwendungen, die nicht auf dem externen Speicher installiert sind, wenn die auf dem externen Speicher installierten Anwendungen dem System wieder zur Verfügung stehen. Nachdem sie diesen Broadcast erhalten haben, können Anwendungen versuchen, sich an Ihren Dienst zu binden.
Alarmdienste
Ihre mit AlarmManager registrierten Alarme werden storniert. Sie müssen alle Alarme manuell neu registrieren, wenn der externe Speicher wieder bereitgestellt wird.
Eingabemethoden-Editoren
Ihr IME wird durch den Standard-IME ersetzt. Wenn der externe Speicher wieder bereitgestellt wird, kann der Nutzer in den Systemeinstellungen Ihren IME wieder aktivieren.
Live-Hintergründe
Ihr ausgeführter Live-Hintergrund wird durch den Standard-Live-Hintergrund ersetzt.
Wenn der externe Speicher wieder bereitgestellt wird, kann der Nutzer Ihren Live-Hintergrund wieder auswählen.
Widgets
Ihr Widget wird vom Startbildschirm entfernt. Wenn der externe Speicher wieder bereitgestellt wird, ist Ihr Widget erst dann für den Nutzer verfügbar, wenn das System die Startanwendung zurückgesetzt hat (in der Regel erst nach einem Neustart des Systems).
Account Managers
Ihre mit AccountManager erstellten Konten werden erst wieder angezeigt, wenn der externe Speicher wieder bereitgestellt wird.
Sync Adapters
Ihr AbstractThreadedSyncAdapter und alle zugehörigen Synchronisierungsfunktionen funktionieren erst wieder, wenn der externe Speicher wieder bereitgestellt wird.
Geräteadministratoren
Ihr DeviceAdminReceiver und alle zugehörigen Verwaltungsfunktionen werden deaktiviert. Dies kann unvorhersehbare Folgen für die Gerätefunktionen haben, die auch nach dem erneuten Bereitstellen des externen Speichers bestehen bleiben können.
Broadcast-Empfänger, die auf „boot completed“ warten
Das System sendet den Broadcast ACTION_BOOT_COMPLETED, bevor der externe Speicher auf dem Gerät bereitgestellt wird. Wenn Ihre Anwendung auf dem externen Speicher installiert ist, kann sie diesen Broadcast nie empfangen.

Wenn Ihre Anwendung eine der oben aufgeführten Funktionen verwendet, sollten Sie nicht zulassen, dass sie auf dem externen Speicher installiert wird. Standardmäßig lässt das System nicht zu, dass Ihre Anwendung auf dem externen Speicher installiert wird. Sie müssen sich also keine Sorgen um Ihre vorhandenen Anwendungen machen. Wenn Sie jedoch sicher sind, dass Ihre Anwendung niemals auf dem externen Speicher installiert werden sollte, sollten Sie dies durch Deklarieren von android:installLocation mit dem Wert "internalOnly" deutlich machen. Dadurch ändert sich zwar nichts am Standardverhalten, es wird aber explizit angegeben, dass Ihre Anwendung nur auf dem internen Speicher installiert werden sollte. Außerdem dient es Ihnen und anderen Entwicklern als Erinnerung daran, dass diese Entscheidung getroffen wurde.

Anwendungen, die auf dem externen Speicher installiert werden sollten

Einfach ausgedrückt: Alles, was die im vorherigen Abschnitt aufgeführten Funktionen nicht verwendet, kann problemlos auf dem externen Speicher installiert werden. Große Spiele sind häufiger die Arten von Anwendungen, bei denen die Installation auf dem externen Speicher zulässig sein sollte, da Spiele in der Regel keine zusätzlichen Dienste bereitstellen, wenn sie inaktiv sind. Wenn der externe Speicher nicht mehr verfügbar ist und ein Spiel prozess beendet wird, sollte es keine sichtbaren Auswirkungen geben, wenn der Speicher wieder verfügbar ist und der Nutzer das Spiel neu startet (vorausgesetzt, der Status des Spiels wurde während des normalen Aktivitätslebenszyklusordnungsgemäß gespeichert).

Wenn Ihre Anwendung mehrere Megabyte für die APK-Datei benötigt, sollten Sie sorgfältig überlegen, ob Sie die Installation auf dem externen Speicher zulassen möchten, damit Nutzer Speicherplatz auf ihrem internen Speicher sparen können.

Weitere Informationen finden Sie unter: <manifest>