Android App auf SD-Karte verschiebbar machen

Im Android-Developers Forum kam die Frage auf, ob es eine Möglichkeit gibt eine App auf die SD-Karte verschiebbar zu machen. Die Frage hat mich neugierig gemacht und ich habe mal nach Möglichkeiten gesucht. Da dies eine Information ist, die dem System nach außen zur Verfügung gestellt werden muss habe ich mal nach Tags oder Attributen im AndroidManifest gesucht und bin auch direkt auf auf das Attribut android:installLocation im manifest Tag aufmerksam geworden.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          ...
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>

Den Standard-Installationsort für eine App kann man seit API Level 8 (Andorid Froyo 2.2.x) über das AndroidManifest festlegen. Die folgenden3 gültigen Werte können hier angegeben werden:

  • „internalOnly“
    Die App darf nur auf dem internen Gerätespeicher installiert werden. Wenn dies eingestellt ist, wird die App niemals auf dem externen Speicher installiert. Wenn der interne Speicher voll ist, installiert das System die App nicht.
    Dies ist auch das Standardverhalten, wenn android:installLocation nicht definiert ist
  • „auto“
    Die App kann auf dem externen Speicher installiert werden, aber das System installiert die App standardmäßig auf dem internen Speicher. Wenn der interne Speicher voll ist, installiert das System die App auf dem externen Speicher (SD Karte). Nach der Installation kann der Benutzer die App über die Systemeinstellungen entweder auf den internen oder den externen Speicher der SD Karte verschieben.
  • „preferExternal“
    Die App möchte bevorzugt auf dem externen Speicher (SD-Karte) installiert werden. Es gibt keine Garantie, dass das System diese Anforderung beachtet. Die App wird möglicherweise auf dem internen Speicher installiert, wenn das externe Medium nicht verfügbar oder voll ist. Nach der Installation kann der Benutzer die App über die Systemeinstellungen entweder auf den internen oder den externen Speicher verschieben.

Wird eine Anwendung auf dem externen Speicher installiert hat das keinerlei Auswirkungen auf die Anwendungsleistung, solange der externe Speicher verfügbar ist. Die .apk-Datei wird auf dem externen Speicher gespeichert, aber alle Benutzerdaten, Datenbanken, optimierten .dex-Dateien und extrahierter nativer Code werden auf dem internen Gerätespeicher gespeichert. Der Container, in dem die Anwendung gespeichert ist, wird mit einem zufällig generierten Schlüssel verschlüsselt, der nur von dem Gerät entschlüsselt werden kann, das die Anwendung ursprünglich installiert hat. Eine Anwendung, die auf einer SD-Karte installiert ist, funktioniert also nur auf dem Gerät auf dem die Installation durchgeführt wurde.

Warnung: Wenn die SD-Karte als USB-Massenspeicher für die gemeinsame Nutzung von Dateien mit einem Computer aktiviert, die SD-Karte über die Systemeinstellungen ausgeschaltet wird der externe Speicher aus dem Gerät Handy entfernt wird, werden alle auf dem externen Speicher laufenden Anwendungen werden sofort beendet.

Weitere Details gibt es unter https://developer.android.com/guide/topics/data/install-location. Vor allem die Liste der Anwendungen, die NICHT auf einem externen Speicher installiert werden sollten ist auf jeden Fall noch mal einen Blick wert wenn man mehr als nur ein paar Activites in der App benötigt.