bundletool

bundletool ist das zugrunde liegende Tool, mit dem in Android Studio, dem Android Gradle-Plug-in und Google Play ein Android App Bundle erstellt wird. bundletool kann ein App-Bundle in die verschiedenen APKs umwandeln, die auf Geräten bereitgestellt werden.

Android SDK-Bundles (ASBs) und ihre APKs werden mit bundletool erstellt. Es ist auch als Befehlszeilentool verfügbar, sodass Sie App-Bundles und SDK-Bundles selbst erstellen und die serverseitige Erstellung der APKs Ihrer App oder der APKs Ihres SDK mit Laufzeit durch Google Play nachbilden können.

bundletool herunterladen

Falls Sie bundletool noch nicht heruntergeladen haben, können Sie dies im GitHub-Repository tun.

App-Bundle erstellen und testen

Sie können Android Studio oder das bundletool-Befehlszeilentool verwenden, um Ihr Android App Bundle zu erstellen und dann zu testen, wie APKs aus diesem App Bundle generiert werden.

App-Bundle erstellen

Verwenden Sie Android Studio und das Android-Gradle-Plug-in, um ein Android App Bundle zu erstellen und zu signieren. Wenn Sie die IDE jedoch nicht verwenden können, z. B. weil Sie einen Continuous Build-Server verwenden, können Sie Ihr App-Bundle auch über die Befehlszeile erstellen und es mit jarsigner signieren.

Weitere Informationen zum Erstellen von App-Bundles mit bundletool finden Sie unter App-Bundle mit Bundletool erstellen.

APK-Set aus Ihrem App-Bundle generieren

Wenn du ein Android App Bundle erstellt hast, solltest du testen, wie Google Play damit APKs generiert und wie sich diese APKs auf einem Gerät verhalten.

Es gibt zwei Möglichkeiten, Ihr App-Bundle zu testen:

In diesem Abschnitt wird erläutert, wie Sie bundletool verwenden, um Ihr App-Bundle lokal zu testen.

Wenn bundletool APKs aus Ihrem App-Bundle generiert, werden die generierten APKs in einem Container mit dem Namen APK-Set-Archiv gespeichert, der die Dateiendung .apks verwendet. Wenn Sie ein APK-Set für alle Gerätekonfigurationen generieren möchten, die von Ihrer App unterstützt werden, verwenden Sie den Befehl bundletool build-apks, wie unten dargestellt:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Wenn Sie die APKs auf einem Gerät bereitstellen möchten, müssen Sie auch die Signaturinformationen Ihrer App angeben, wie im folgenden Befehl gezeigt. Wenn Sie keine Signaturinformationen angeben, versucht bundletool, Ihre APKs mit einem Debug-Schlüssel zu signieren.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

In der folgenden Tabelle werden die verschiedenen Flags und Optionen, die Sie beim Verwenden des Befehls bundletool build-apks festlegen können, genauer beschrieben:

Tabelle 1 Optionen für den bundletool build-apks-Befehl

Melden Beschreibung
--bundle=path Erforderlich: Gibt den Pfad zum App-Bundle an, das Sie mit Android Studio erstellt haben. Weitere Informationen finden Sie unter Projekt erstellen.
--output=path Erforderlich: Gibt den Namen der Ausgabedatei .apks an, die alle APK-Artefakte für Ihre App enthält. Wenn Sie die Artefakte in dieser Datei auf einem Gerät testen möchten, folgen Sie der Anleitung im Abschnitt zum Bereitstellen von APKs auf einem verbundenen Gerät.
--overwrite Überschreibt alle vorhandenen Ausgabedateien mit dem Pfad, den Sie mit der Option --output angeben. Wenn Sie dieses Flag nicht angeben und die Ausgabedatei bereits vorhanden ist, erhalten Sie einen Build-Fehler.
--aapt2=path Gibt einen benutzerdefinierten Pfad zu AAPT2 an. Standardmäßig enthält bundletool eine eigene Version von AAPT2.
--ks=path (Optional) Gibt den Pfad zum Bereitstellungsspeicherschlüssel an, der zum Signieren der APKs verwendet wird. Wenn Sie dieses Flag nicht angeben, versucht bundletool, Ihre APKs mit einem Debug-Signaturschlüssel zu signieren.
--ks-pass=pass:password
oder
--ks-pass=file:/path/to/file
Gibt Ihr Schlüsselspeicherpasswort an. Wenn Sie ein Passwort im Nur-Text-Format angeben, kennzeichnen Sie es mit pass:. Wenn Sie den Pfad zu einer Datei übergeben, die das Passwort enthält, qualifizieren Sie ihn mit file:. Wenn Sie einen Keystore mit dem Flag --ks angeben, ohne --ks-pass anzugeben, werden Sie von bundletool über die Befehlszeile zur Eingabe eines Passworts aufgefordert.
--ks-key-alias=alias Gibt den Alias des Signaturschlüssels an, den Sie verwenden möchten.
--key-pass=pass:password
oder
--key-pass=file:/path/to/file
Gibt das Passwort für den Signierschlüssel an. Wenn Sie ein Passwort im Nur-Text-Format angeben, kennzeichnen Sie es mit pass:. Wenn Sie den Pfad zu einer Datei übergeben, die das Passwort enthält, qualifizieren Sie ihn mit file:.

Wenn dieses Passwort mit dem Passwort für den Keystore identisch ist, können Sie dieses Flag weglassen.

--connected-device Weist bundletool an, APKs zu erstellen, die auf die Konfiguration eines verbundenen Geräts ausgerichtet sind. Wenn Sie dieses Flag nicht angeben, generiert bundletool APKs für alle Gerätekonfigurationen, die von Ihrer App unterstützt werden.
--device-id=serial-number Wenn Sie mehrere verbundene Geräte haben, verwenden Sie dieses Flag, um die Serien-ID des Geräts anzugeben, auf dem Sie Ihre App bereitstellen möchten.
--device-spec=spec_json Gibt einen Pfad zu einer .json-Datei an, in der die Gerätekonfiguration angegeben ist, auf die Sie abzielen möchten. Weitere Informationen finden Sie im Abschnitt JSON-Dateien mit Gerätespezifikationen generieren und verwenden.
--mode=universal Legt den Modus auf universal fest. Verwenden Sie diese Option, wenn Sie bundletool ein einzelnes APK erstellen möchten, das den gesamten Code und alle Ressourcen Ihrer App enthält, sodass das APK mit allen Gerätekonfigurationen kompatibel ist, die von Ihrer App unterstützt werden.

Hinweis:bundletool enthält in einem universellen APK nur Funktionsmodule, in deren Manifest <dist:fusing dist:include="true"/> angegeben ist. Weitere Informationen zum Manifest von Funktionsmodulen

Diese APKs sind größer als die für eine bestimmte Gerätekonfiguration optimierten. Sie lassen sich jedoch leichter mit internen Testern teilen, die Ihre App beispielsweise auf mehreren Gerätekonfigurationen testen möchten.

--local-testing Ermöglicht das lokale Testen Ihres App-Bundles. Lokale Tests ermöglichen schnelle, iterative Testzyklen, ohne dass Sie die App auf Google Play-Server hochladen müssen.

Ein Beispiel dafür, wie Sie die Modulinstallation mit dem --local-testing-Flag testen, finden Sie unter Lokale Tests von Modulinstallationen.

APKs auf einem verbundenen Gerät bereitstellen

Nachdem Sie eine Reihe von APKs generiert haben, können Sie mit bundletool die richtige Kombination von APKs aus dieser Reihe auf einem verbundenen Gerät bereitstellen.

Wenn Sie beispielsweise ein verbundenes Gerät mit Android 5.0 (API-Level 21) oder höher haben, überträgt bundletool das Basis-APK, die APKs für Funktionsmodule und die Konfigurations-APKs, die zum Ausführen Ihrer App auf diesem Gerät erforderlich sind. Wenn auf deinem verbundenen Gerät Android 4.4 (API‑Level 20) oder niedriger ausgeführt wird, sucht bundletool alternativ nach einem kompatiblen Multi-APK, das auf deinem Gerät bereitgestellt werden kann.

Wenn Sie Ihre App über ein APK-Set bereitstellen möchten, verwenden Sie den Befehl install-apks und geben Sie den Pfad des APK-Sets mit dem Flag --apks=/path/to/apks an, wie im folgenden Befehl gezeigt. Wenn Sie mehrere Geräte verbunden haben, geben Sie ein Zielgerät an, indem Sie das Flag --device-id=serial-id hinzufügen.

bundletool install-apks --apks=/MyApp/my_app.apks

Gerätespezifische APKs generieren

Wenn Sie nicht für alle Gerätekonfigurationen, die Ihre App unterstützt, eine Reihe von APKs erstellen möchten, können Sie mit der Option --connected-device APKs erstellen, die nur auf die Konfiguration eines verbundenen Geräts ausgerichtet sind. Das folgende Beispiel zeigt, wie das geht. Wenn mehrere Geräte verbunden sind, geben Sie ein Zielgerät an, indem Sie das Flag --device-id=serial-id einfügen.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

JSON-Dateien mit Gerätespezifikationen generieren und verwenden

Mit bundletool kann ein APK-Set generiert werden, das auf eine Gerätekonfiguration ausgerichtet ist, die in einer JSON-Datei angegeben ist. Führen Sie zuerst den folgenden Befehl aus, um eine JSON-Datei für ein verbundenes Gerät zu generieren:

bundletool get-device-spec --output=/tmp/device-spec.json

Unter bundletool wird eine JSON-Datei für Ihr Gerät im Verzeichnis des Tools erstellt. Sie können die Datei dann an bundletool übergeben, um eine Reihe von APKs zu generieren, die nur auf die in der JSON-Datei beschriebene Konfiguration ausgerichtet sind:

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Gerätespezifikations-JSON manuell erstellen

Wenn Sie keinen Zugriff auf das Gerät haben, für das Sie ein gezieltes APK-Set erstellen möchten, z. B. wenn Sie Ihre App auf einem Gerät testen möchten, das Sie nicht zur Hand haben, können Sie manuell eine JSON-Datei im folgenden Format erstellen:

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

Sie können dieses JSON dann wie im vorherigen Abschnitt beschrieben an den Befehl bundle extract-apks übergeben.

Gerätespezifische APKs aus einem vorhandenen APK-Set extrahieren

Wenn Sie ein vorhandenes APK-Set haben und daraus eine Teilmenge von APKs extrahieren möchten, die auf eine bestimmte Gerätekonfiguration ausgerichtet sind, können Sie den Befehl extract-apks verwenden und eine JSON-Datei mit Gerätespezifikationen angeben:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

Geschätzte Downloadgrößen von APKs in einem APK-Set messen

Wenn Sie die geschätzten Downloadgrößen von APKs in einem APK-Set messen möchten, wie sie komprimiert über das Netzwerk bereitgestellt würden, verwenden Sie den Befehl get-size total:

bundletool get-size total --apks=/MyApp/my_app.apks

Sie können das Verhalten des Befehls get-size total mit den folgenden Flags ändern:

Tabelle 2 Optionen für den get-size total-Befehl

Melden Beschreibung
--apks=path (Erforderlich) Gibt den Pfad zur vorhandenen APK-Set-Datei an, deren Downloadgröße gemessen wird.
--device-spec=path Gibt den Pfad zur Gerätebeschreibung an, die für den Abgleich verwendet werden soll (aus get-device-spec oder manuell erstellt). Sie können einen Teilpfad angeben, um eine Reihe von Konfigurationen auszuwerten.
--dimensions=dimensions Gibt die Dimensionen an, die bei der Berechnung der Schätzungen der Größe verwendet werden. Akzeptiert eine durch Kommas getrennte Liste von: SDK, ABI, SCREEN_DENSITY und LANGUAGE. Wenn Sie alle Dimensionen berücksichtigen möchten, geben Sie ALL an.
--instant Hier wird die Downloadgröße der Instant-fähigen APKs anstelle der installierbaren APKs gemessen. Standardmäßig wird in bundletool die Downloadgröße der installierbaren APKs gemessen.
--modules=modules Gibt eine durch Kommas getrennte Liste von Modulen im APK-Set an, die bei der Messung berücksichtigt werden sollen. Der Befehl bundletool umfasst automatisch alle abhängigen Module für den angegebenen Satz. Standardmäßig wird mit dem Befehl die Downloadgröße aller Module gemessen, die beim ersten Download installiert werden.

Zusätzliche Ressourcen

bundletoolApp Bundles: Testing bundles with bundletool and the Play Console