bundletool est l'outil sous-jacent utilisé par Android Studio, le plug-in Android Gradle et Google Play. bundletool peut compiler un Android App Bundle (AAB) et convertir un app bundle en plusieurs APK déployés sur des appareils.
Les fichiers Android SDK Bundle (ASB) et leurs APK sont compilés avec bundletool, qui est également disponible sous la forme d'un outil de ligne de commande. Vous pouvez ainsi compiler vous-même des app bundles et des SDK bundles, et recréer la build Google Play côté serveur des APK de votre application ou de votre SDK compatible avec l'environnement d'exécution.
Télécharger bundletool
Si vous ne l'avez pas déjà fait, téléchargez bundletool à partir du dépôt GitHub.
Compiler et tester un app bundle
Vous pouvez utiliser Android Studio ou l'outil de ligne de commande bundletool pour compiler votre Android App Bundle, puis tester la génération d'APK à partir de cet app bundle.
Compiler un app bundle
Utilisez Android Studio et le plug-in Android Gradle pour créer et signer un Android App Bundle.
Cependant, si vous ne pouvez pas utiliser l'IDE (par exemple, parce que vous utilisez un serveur de compilation continue), vous pouvez également compiler votre app bundle à partir de la ligne de commande et le signer avec jarsigner.
Pour en savoir plus sur la compilation d'app bundles avec bundletool, consultez Compiler un app bundle à l'aide de bundletool.
Générer un ensemble d'APK à partir de votre app bundle
Après avoir créé votre Android App Bundle, testez la génération des APK sur Google Play à partir de ce package et leur comportement une fois qu'ils sont déployés sur un appareil.
Deux options sont disponibles pour tester votre app bundle :
- Utilisez l'outil de ligne de commande
bundletoolen local. - Importez votre app bundle dans la Play Console via Google Play en utilisant un canal de test.
Cette section explique comment tester votre app bundle en local à l'aide de bundletool.
Lorsque bundletool génère des APK à partir de votre app bundle, il les inclut dans un conteneur appelé archive d'ensembles d'APK, qui utilise l'extension de fichier .apks. Pour générer un ensemble d'APK pour toutes les configurations d'appareil compatibles avec votre application à partir de votre app bundle, exécutez la commande bundletool build-apks, comme indiqué ci-dessous :
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Si vous souhaitez déployer les APK sur un appareil, vous devez inclure les informations de signature de votre application, comme indiqué dans la commande suivante. Si vous ne spécifiez pas d'informations de signature, bundletool tente de signer vos APK pour vous à l'aide d'une clé de débogage.
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
Le tableau suivant décrit de manière détaillée les différents indicateurs et options que vous pouvez définir lorsque vous utilisez la commande bundletool build-apks :
Tableau 1. Options pour la commande bundletool build-apks
| Indicateur | Description |
|---|---|
--bundle=path |
(Obligatoire) Spécifie le chemin d'accès à l'app bundle que vous avez compilé à l'aide d'Android Studio. Pour en savoir plus, consultez Compiler votre projet. |
--output=path |
(Obligatoire) Spécifie le nom du fichier .apks de sortie qui contient tous les artefacts d'APK de votre application. Pour tester les artefacts de ce fichier sur un appareil, suivez la procédure décrite dans la section Déployer des APK sur un appareil connecté.
|
--overwrite |
Remplace tous les fichiers de sortie existants par le chemin d'accès que vous spécifiez à l'aide de l'option --output. Si vous n'incluez pas cet indicateur et que le fichier de sortie existe déjà, une erreur de compilation est émise.
|
--aapt2=path |
Spécifie un chemin d'accès personnalisé à AAPT2.
Par défaut, bundletool inclut sa propre version d'AAPT2.
|
--ks=path |
(Facultatif) Spécifie le chemin d'accès au keystore de déploiement utilisé pour signer les APK. Si vous n'incluez pas cet indicateur, bundletool tente de signer vos APK à l'aide d'une clé de débogage.
|
--ks-pass=pass:password ou --ks-pass=file:/path/to/file |
Spécifie le mot de passe de votre keystore. Si vous spécifiez un mot de passe en texte brut, qualifiez-le avec pass:.
Si vous transmettez le chemin d'accès à un fichier contenant le mot de passe, qualifiez-le avec file:. Si vous spécifiez un keystore à l'aide de l'indicateur --ks sans spécifier --ks-pass, bundletool vous invite à saisir un mot de passe à partir de la ligne de commande.
|
--ks-key-alias=alias |
Spécifie l'alias de la clé de signature que vous souhaitez utiliser. |
--key-pass=pass:password ou --key-pass=file:/path/to/file |
Spécifie le mot de passe de la clé de signature. Si vous spécifiez un mot de passe en texte brut, qualifiez-le avec pass:.
Si vous transmettez le chemin d'accès à un fichier contenant le mot de passe, qualifiez-le avec file:. Si ce mot de passe est identique à celui du keystore, vous pouvez omettre cet indicateur. |
--connected-device |
Indique à bundletool de créer des APK qui ciblent la configuration d'un appareil connecté. Si vous n'incluez pas cet indicateur, bundletool génère des APK pour toutes les configurations d'appareil prises en charge par votre application.
|
--device-id=serial-number |
Si vous disposez de plusieurs appareils connectés, utilisez cet indicateur pour spécifier l'ID de série de l'appareil sur lequel vous souhaitez déployer votre application. |
--device-spec=spec_json |
Fournit un chemin d'accès à un fichier .json spécifiant la configuration d'appareil que vous souhaitez cibler. Pour en savoir plus, consultez la section Générer et utiliser des fichiers JSON de spécification d'appareil.
|
--mode=universal |
Définit le mode sur universal. Utilisez cette option si vous souhaitez que bundletool ne compile qu'un seul APK comprenant l'ensemble du code et des ressources de votre application, de sorte que l'APK soit compatible avec toutes les configurations d'appareil prises en charge par votre application.
Remarque : N'oubliez pas que ces APK sont plus volumineux que ceux qui sont optimisés pour une configuration d'appareil spécifique. Toutefois, ils sont plus faciles à partager avec les testeurs internes qui souhaitent, par exemple, tester votre application sur plusieurs configurations d'appareil. |
--local-testing
|
Active votre app bundle pour les tests en local.
Les tests en local permettent d'effectuer des cycles de test rapides et itératifs sans avoir à les importer sur les serveurs Google Play.
Pour savoir comment tester une installation de modules à l'aide de l'indicateur |
Déployer des APK sur un appareil connecté
Une fois que vous avez généré un ensemble d'APK, bundletool peut déployer la bonne combinaison d'APK sur un appareil connecté à partir de cet ensemble.
Par exemple, si votre appareil connecté est équipé d'Android 5.0 (niveau d'API 21) ou version ultérieure, bundletool transmet l'APK de base, les APK du module de fonctionnalité et les APK de configuration requis pour exécuter votre application sur cet appareil. Si votre appareil connecté est équipé d'Android 4.4 (niveau d'API 20) ou version antérieure, bundletool recherche un APK multiple compatible à déployer sur votre appareil.
Pour déployer votre application à partir d'un ensemble d'APK, exécutez la commande install-apks et spécifiez le chemin d'accès de l'ensemble à l'aide de l'indicateur --apks=/path/to/apks, comme dans la commande suivante. Si plusieurs appareils sont connectés, spécifiez un appareil cible en ajoutant l'indicateur --device-id=serial-id.
bundletool install-apks --apks=/MyApp/my_app.apks
Générer un ensemble d'APK spécifique à un appareil
Si vous souhaitez ne pas créer un ensemble d'APK pour toutes les configurations d'appareil prises en charge par votre application, vous pouvez compiler des APK qui ne ciblent que la configuration d'un appareil connecté à l'aide de l'option --connected-device, comme indiqué dans la commande suivante.
Si plusieurs appareils sont connectés, spécifiez un appareil cible en ajoutant l'indicateur --device-id=serial-id.
bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Générer et utiliser des fichiers JSON de spécification d'appareil
bundletool peut générer un ensemble d'APK ciblant une configuration d'appareil spécifiée par un fichier JSON. Si vous voulez d'abord générer un fichier JSON pour un appareil connecté, exécutez la commande suivante :
bundletool get-device-spec --output=/tmp/device-spec.json
bundletool crée un fichier JSON pour votre appareil dans le répertoire de l'outil. Vous pouvez ensuite transmettre le fichier à bundletool afin de générer un ensemble d'APK ciblant uniquement la configuration décrite dans ce fichier JSON, comme ceci :
bundletool build-apks --device-spec=/MyApp/pixel2.json --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Créer manuellement un fichier JSON de spécification d'appareil
Si vous n'avez pas accès à l'appareil pour lequel vous souhaitez compiler un ensemble d'APK ciblé (par exemple, si vous voulez essayer votre application sur un appareil que vous ne possédez pas), vous pouvez créer manuellement un fichier JSON au format suivant :
{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
Vous pouvez ensuite transmettre ce fichier JSON à la commande bundle extract-apks, comme indiqué dans la section précédente.
Extraire des APK spécifiques à l'appareil d'un ensemble d'APK existant
Supposons que vous ayez un ensemble d'APK et que vous souhaitiez en extraire un sous-ensemble d'APK ciblant une configuration d'appareil spécifique. Dans ce cas, vous pouvez utiliser la commande extract-apks et indiquer un fichier JSON de spécification d'appareil, comme suit :
bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json
Mesurer la taille de téléchargement estimée des APK d'un ensemble d'APK
Pour mesurer la taille de téléchargement estimée des APK d'un ensemble d'APK tels qu'ils seraient diffusés sous forme compressée sur le réseau, exécutez la commande get-size total :
bundletool get-size total --apks=/MyApp/my_app.apks
Vous pouvez modifier le comportement de la commande get-size total à l'aide des indicateurs suivants :
Tableau 2. Options pour la commande get-size total
| Indicateur | Description |
|---|---|
--apks=path |
(Obligatoire) Spécifie le chemin d'accès au fichier d'ensemble d'APK dont la taille de téléchargement est mesurée. |
--device-spec=path |
Indique le chemin d'accès au fichier de spécification de l'appareil (à partir de get-device-spec ou construit manuellement) à utiliser pour la mise en correspondance.
Vous pouvez spécifier un chemin d'accès partiel pour évaluer un ensemble de configurations.
|
--dimensions=dimensions
| Spécifie les dimensions utilisées lors du calcul des estimations de taille. Accepte une liste d'éléments SDK, ABI, SCREEN_DENSITY et LANGUAGE séparés par une virgule. Pour effectuer des mesures dans toutes les dimensions, spécifiez ALL.
|
--instant |
Mesure la taille de téléchargement des APK permettant une utilisation instantanée au lieu des APK installables. Par défaut, bundletool mesure la taille de téléchargement des APK installables.
|
--modules=modules |
Spécifie une liste de modules séparés par une virgule dans l'ensemble d'APK à prendre en compte dans la mesure. La commande bundletool inclut automatiquement tous les modules dépendants de l'ensemble spécifié. Par défaut, la commande mesure la taille de téléchargement de tous les modules installés lors du premier téléchargement.
|
Ressources supplémentaires
Pour en savoir plus sur l'utilisation de bundletool, regardez la vidéo App Bundles: Testing bundles with bundletool and the Play Console (App bundles : tests avec Bundletool et la Play Console).