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:
- Verwenden Sie das
bundletool-Befehlszeilentool lokal. - Laden Sie Ihr Bundle in die Play Console hoch. Verwenden Sie dazu einen Test-Track in Google Play.
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: 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 |
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