Android App Bundle-Format

Ein Android App Bundle ist eine Datei (mit der Dateiendung .aab), die du bei Google Play hochlädst.

App Bundles sind signierte Binärprogramme, die den Code und die Ressourcen Ihrer App in Modulen organisieren, wie in Abbildung 1 dargestellt. Code und Ressourcen für jedes Modul sind ähnlich wie in einem APK organisiert – und das ist sinnvoll, da jedes dieser Module als separate APKs generiert werden kann. Google Play verwendet dann das App Bundle, um die verschiedenen APKs zu generieren, die Nutzern zur Verfügung gestellt werden, z. B. das Basis-APK, Funktions-APKs, Konfigurations-APKs und Multi-APKs (für Geräte, die keine unterteilten APKs unterstützen). Die blau eingefärbten Verzeichnisse, z. B. die Verzeichnisse drawable/, values/ und lib/, stellen Code und Ressourcen dar, mit denen Google Play Konfigurations-APKs für jedes Modul erstellt.

Mit App Bundles wird Ihre App in Verzeichnissen organisiert, die jeweils ein Modul darstellen. In jedem Modulverzeichnis sind Code und Ressourcen ähnlich wie ein typisches APK organisiert.

Abbildung 1: Die Inhalte eines Android App Bundles mit einem Basismodul, zwei Funktionsmodulen und zwei Asset-Packs.

In der folgenden Liste werden einige Dateien und Verzeichnisse des App Bundles genauer beschrieben:

  • base/,feature1/ und feature2/: Jedes dieser Verzeichnisse der obersten Ebene stellt ein anderes Modul Ihrer Anwendung dar. Das Basismodul Ihrer Anwendung ist immer in einem base-Verzeichnis des App-Bundles enthalten. Das Verzeichnis jedes Funktionsmoduls erhält jedoch den Namen, der im Manifest des Moduls durch das Attribut split angegeben ist. Weitere Informationen finden Sie unter Manifest für Featuremodule.
  • asset_pack_1/ und asset_pack_2/: Bei großen, grafikintensiven Apps oder Spielen können Sie Assets in Asset-Packs modularisieren. Asset-Packs sind aufgrund ihrer großen Größenbeschränkungen ideal für Spiele. Sie können mithilfe von drei Bereitstellungsmodi anpassen, wie und wann jedes Asset-Pack auf ein Gerät heruntergeladen wird: Installationszeit, Fast-Follow und On-Demand. Alle Asset-Packs werden bei Google Play gehostet und bereitgestellt. Weitere Informationen zum Hinzufügen von Asset-Packs zu Ihrem App-Bundle finden Sie in der Übersicht zu Play Asset Delivery.
  • BUNDLE-METADATA/: Dieses Verzeichnis enthält Metadatendateien, die Informationen enthalten, die für Tools oder Anwendungsspeicher nützlich sind. Solche Metadatendateien können ProGuard-Zuordnungen und die vollständige Liste der DEX-Dateien Ihrer App enthalten. Dateien in diesem Verzeichnis werden nicht in die APKs Ihrer App gepackt.
  • *.pb-Dateien (Module Protocol Buffer):Diese Dateien enthalten Metadaten, mit denen die Inhalte der einzelnen App-Module in App-Shops wie Google Play beschrieben werden können. BundleConfig.pb liefert beispielsweise Informationen zum Bundle selbst, z. B. welche Version der Build-Tools zum Erstellen des App-Bundles verwendet wurde. native.pb und resources.pb beschreiben den Code und die Ressourcen in den einzelnen Modulen. Dies ist hilfreich, wenn Google Play APKs für verschiedene Gerätekonfigurationen optimiert.
  • manifest/: Im Gegensatz zu APKs speichern App Bundles die Datei AndroidManifest.xml jedes Moduls in diesem separaten Verzeichnis.
  • dex/: Im Gegensatz zu APKs speichern App Bundles die DEX-Dateien für jedes Modul in diesem separaten Verzeichnis.
  • res/, lib/ und assets/: Diese Verzeichnisse sind mit denen in einem typischen APK identisch. Wenn Sie Ihr App-Bundle hochladen, prüft Google Play diese Verzeichnisse und Pakete nur die Dateien, die der Zielgerätekonfiguration entsprechen. Dabei werden die Dateipfade beibehalten.
  • root/: In diesem Verzeichnis werden Dateien gespeichert, die später in das Stammverzeichnis eines APKs verschoben werden, das das Modul enthält, in dem sich das Verzeichnis befindet. Das Verzeichnis base/root/ eines App-Bundles kann beispielsweise Java-basierte Ressourcen enthalten, die Ihre Anwendung mit Class.getResource() lädt. Diese Dateien werden später in das Stammverzeichnis des Basis-APKs Ihrer App und in alle von Google Play generierten Multi-APKs verschoben. Die Pfade in diesem Verzeichnis werden ebenfalls beibehalten. Das heißt, auch die Verzeichnisse (und ihre Unterverzeichnisse) werden im Stammverzeichnis des APK verschoben.

Übersicht über geteilte APKs

Eine grundlegende Komponente bei der Bereitstellung optimierter Apps ist der Mechanismus für geteilte APKs, der unter Android 5.0 (API-Level 21) und höher verfügbar ist. Geteilte APKs sind regulären APKs sehr ähnlich. Sie enthalten kompilierten DEX-Bytecode, Ressourcen und ein Android-Manifest. Die Android-Plattform kann jedoch mehrere installierte unterteilte APKs als eine einzelne App behandeln. Sie können also mehrere unterteilte APKs installieren, die Zugriff auf gemeinsamen Code und gemeinsame Ressourcen haben und als eine installierte App auf dem Gerät angezeigt werden.

Der Vorteil von unterteilten APKs besteht darin, dass ein monolithisches APK – also ein APK, das Code und Ressourcen für alle von Ihrer App unterstützten Funktionen und Gerätekonfigurationen enthält – in kleinere, diskrete Pakete aufgeteilt werden können, die nach Bedarf auf dem Gerät eines Nutzers installiert werden.

Ein unterteiltes APK kann beispielsweise den Code und die Ressourcen für eine zusätzliche Funktion enthalten, die nur wenige Ihrer Nutzer benötigen, während ein anderes unterteiltes APK nur Ressourcen für eine bestimmte Sprache oder Bildschirmdichte enthält. Jedes dieser unterteilten APKs wird heruntergeladen und installiert, wenn der Nutzer es anfordert oder vom Gerät benötigt wird.

Im Folgenden werden die verschiedenen Arten von APKs beschrieben, die zusammen auf einem Gerät installiert werden können, um eine vollständige App-Nutzung zu ermöglichen. In späteren Abschnitten auf dieser Seite erfahren Sie, wie Sie Ihr App-Projekt so konfigurieren, dass diese APKs unterstützt werden.

  • Basis-APK:Dieses APK enthält Code und Ressourcen, auf die alle anderen unterteilten APKs zugreifen können, und bietet die grundlegenden Funktionen für deine App. Wenn ein Nutzer zum Download deiner App anfordert, wird dieses APK zuerst heruntergeladen und installiert. Das liegt daran, dass nur das Manifest des Basis-APKs eine vollständige Deklaration der Dienste, Inhaltsanbieter, Berechtigungen, Anforderungen an Plattformversionen und Abhängigkeiten von Systemfunktionen Ihrer App enthält. Google Play generiert das Basis-APK für deine App aus dem App- oder Basismodul deines Projekts. Wenn du die anfängliche Downloadgröße deiner App reduzieren möchtest, solltest du beachten, dass sämtlicher Code und alle in diesem Modul enthaltenen Ressourcen im Basis-APK deiner App enthalten sind.
  • Konfigurations-APKs:Jedes dieser APKs enthält native Bibliotheken und Ressourcen für eine bestimmte Bildschirmdichte, CPU-Architektur oder Sprache. Wenn ein Nutzer Ihre App herunterlädt, lädt und installiert sein Gerät nur die Konfigurations-APKs, die auf sein Gerät ausgerichtet sind. Jedes Konfigurations-APK ist entweder eine Abhängigkeit von einem Basis-APK oder einem Feature-Modul-APK. Sie werden also zusammen mit dem APK heruntergeladen und installiert, für das sie Code und Ressourcen bereitstellen. Im Gegensatz zu den Basis- und Funktionsmodulen erstellen Sie kein separates Modul für Konfigurations-APKs. Wenn Sie Standardverfahren verwenden, um alternative, konfigurationsspezifische Ressourcen für Ihre Basis- und Funktionsmodule zu organisieren, generiert Google Play automatisch Konfigurations-APKs für Sie.
  • Funktionsmodul-APKs:Jedes dieser APKs enthält Code und Ressourcen für eine Funktion Ihrer App, die Sie mithilfe von Funktionsmodulen modularisieren. Sie können dann anpassen, wie und wann diese Funktion auf ein Gerät heruntergeladen wird. Beispielsweise können Funktionen über die Play Core Library nach Bedarf installiert werden, nachdem das Basis-APK auf dem Gerät installiert wurde, um dem Nutzer zusätzliche Funktionen bereitzustellen. Nehmen wir eine Chat-App, die die Möglichkeit zum Aufnehmen und Senden von Fotos nur dann herunterlädt und installiert, wenn der Nutzer diese Funktion verwenden möchte. Da Featuremodule bei der Installation möglicherweise nicht verfügbar sind, sollten Sie allgemeinen Code und alle Ressourcen in das Basis-APK aufnehmen. Ihr Featuremodul sollte also davon ausgehen, dass bei der Installation nur Code und Ressourcen des Basis-APKs verfügbar sind. Google Play generiert Feature-Modul-APKs für deine App aus den Feature-Modulen deines Projekts.

Stellen Sie sich eine App mit drei Funktionsmodulen und Unterstützung für mehrere Gerätekonfigurationen vor. Abbildung 1 unten zeigt, wie die Abhängigkeitsstruktur für die verschiedenen APKs der App aussehen könnte. Beachte, dass das Basis-APK den Kopf des Baums bildet und alle anderen APKs vom Basis-APK abhängen. Weitere Informationen dazu, wie die Module für diese APKs in einem Android App Bundle dargestellt werden, findest du unter Android App Bundle-Format.

Das Basis-APK befindet sich an der Spitze des Baums. Die Funktionsmodul-APKs sind davon abhängig. Konfigurations-APKs, die gerätekonfigurationsspezifischen Code und Ressourcen für die Basis und jedes Featuremodul-APK enthalten, bilden die Blattknoten der Abhängigkeitsstruktur.

Abbildung 1: Abhängigkeitsstruktur für eine App, die mithilfe von unterteilten APKs bereitgestellt wird

Beachten Sie, dass Sie diese APKs nicht selbst erstellen müssen. Google Play übernimmt ein einzelnes signiertes App-Bundle für Sie, das Sie mit Android Studio erstellen. Weitere Informationen zum App Bundle-Format und dessen Erstellung finden Sie unter Android App Bundles erstellen, bereitstellen und hochladen.

Geräte mit Android 4.4 (API-Level 19) und niedriger

Da Geräte mit Android 4.4 (API-Level 19) und niedriger das Herunterladen und Installieren von unterteilten APKs nicht unterstützen, stellt Google Play diesen Geräten stattdessen ein einzelnes APK, ein sogenanntes Multi-APK, zur Verfügung, das für die Gerätekonfiguration optimiert ist. Multi-APKs stellen also die vollständige App-Nutzung dar, enthalten jedoch keinen unnötigen Code und keine Ressourcen, z. B. für andere Bildschirmdichten und CPU-Architekturen.

Sie enthalten jedoch Ressourcen für alle Sprachen, die Ihre App unterstützt. So können Nutzer beispielsweise die Spracheinstellung Ihrer App ändern, ohne ein anderes Multi-APK herunterladen zu müssen.

Mit Multi-APKs können später keine Funktionsmodule bei Bedarf heruntergeladen werden. Wenn Sie ein Feature-Modul in dieses APK aufnehmen möchten, müssen Sie beim Erstellen des Feature-Moduls entweder On-Demand deaktivieren oder Fusing aktivieren.

Bei App Bundles musst du keine APKs für jede von deiner App unterstützte Gerätekonfiguration erstellen, signieren, hochladen und verwalten. Sie erstellen und laden weiterhin nur ein einzelnes App-Bundle für Ihre gesamte App und Google Play kümmert sich um den Rest. Unabhängig davon, ob Sie Geräte mit Android 4.4 oder niedriger unterstützen möchten oder nicht, bietet Google Play sowohl Ihnen als auch Ihren Nutzern einen flexiblen Bereitstellungsmechanismus.

Änderungen der Nutzersprache

Mit App Bundles laden Geräte nur den Code und die Ressourcen herunter, die zum Ausführen Ihrer App erforderlich sind. Bei Sprachressourcen lädt das Gerät eines Nutzers also nur die Sprachressourcen Ihrer App herunter, die der oder mehreren Sprachen entsprechen, die derzeit in den Geräteeinstellungen ausgewählt sind.

Wenn ein Nutzer die Sprache in den Geräteeinstellungen ändert, muss Google Play möglicherweise einige zusätzliche unterteilte APKs herunterladen und installieren, bevor die App in der neuen Sprache angezeigt werden kann.

Google Play versucht sofort nach der Umstellung, die zusätzlichen Sprachen herunterzuladen. Wenn das Nutzergerät offline ist, der Download fehlschlägt oder die Ressourcen zu groß sind, versucht Google Play den Download im Hintergrund noch einmal, wenn die Gerätebedingungen günstiger sind. Wenn sie auf einem Gerät mit Android 9.0 (API-Level 28) oder niedriger ausgeführt wird und sich Ihre App während der Installation der neuen APKs mit Sprachaufteilung im Vordergrund befindet, wird die App beendet.

Wenn für Ihre Anwendung erforderlich ist, dass alle Sprachen auf dem Gerät jederzeit verfügbar sein müssen, können Sie die Sprachaufteilung in Ihrer Build-Konfiguration deaktivieren.

Wenn für Ihre App zusätzliche Sprachen unabhängig von den in den Geräteeinstellungen ausgewählten Nutzersprachen heruntergeladen werden müssen, z. B. um eine In-App-Sprachauswahl zu implementieren, können Sie diese bei Bedarf über die Play Core-Bibliothek herunterladen.