Photo par Tim Mossholder

Générez un Apk universel à partir de votre Android App Bundle avec Azure DevOps

Uploadez des Android App Bundle sur App Center!

Posted by Damien Aicheh on May 05, 2020 · 6 mins

Depuis que Google a introduit l’Android App Bundle, il devient la nouvelle norme pour distribuer votre application Android sur les stores. Il nous permet de générer une version spécifique de notre application pour n’importe quel appareil, avec seulement les recources dont cet appareil a besoin.

Cependant, dans certains cas, vous devez convertir votre Android App Bundle en apk universel pour permettre à vos testeurs d’accéder à l’application. C’est le cas si vous utilisez App Center pour partager votre application avec vos testeurs. Pour ce faire, vous devez utiliser un outil fourni par Google: Bundletool, cela permet de manipuler notre Android App Bundle.

Présentation de Bundletool Helper

Lorsque vous configurez votre pipeline Azure DevOps, vous pouvez spécifier une étape pour distribuer votre application Android via App Center mais comme mentionné précédemment, il ne prend en charge que les apk. De plus, Azure DevOps n’a pas bundletool pré-installé sur ses agents.

Pour résoudre ce problème, j’ai développé un nouvel ensemble de tasks Azure DevOps appelé Bundletool Helper, facile à utiliser dans votre pipeline et gratuit. Ce groupe de tasks fournit un moyen d’installer la dernière version de bundletool et de l’utiliser pour manipuler vos Android App Bundle.

Usage

Tout d’abord, accédez à votre Azure DevOps et installez l’extension Bundletool Helper dans votre organisation.

Bundletool Helper Tasks

Installer Bundletool

Cette extension contient plusieurs tasks, la plus importante est InstallBundletool. Pour l’utiliser dans votre azure-pipelines.yml il vous suffit de l’appeler comme ceci:

- task: InstallBundletool@1
  inputs:
    username: 'githubUsername' # Optional but recommanded
    personalAccessToken: '$(githubPersonnalAccessToken)' # Optional but recommanded

Cette task va télécharger la dernière version de bundletool en tant que .jar.

Les informations d’identification Github sont utilisées pour lire uniquement le répertoire public bundletool. Si vous ne le spécifiez pas, vous serez limité par les [limites de requêtes par défaut de l’API Github][github-api-rate-limitation]. Si la limite est atteinte, la task échouera avec ce type de message:

{“message”:”API rate limit exceeded for XXX.XXX.XXX.XXX. (But here’s the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)”,”documentation_url”:”https://developer.github.com/v3/#rate-limiting”}

Pour obtenir un token d’accès, cela prend quelques secondes, accédez à votre compte Github puis Settings > Developer settings > Personal access tokens et cliquez sur Generate new token. Vérifiez uniquement l’accès public_repo et générez-le. Assurez-vous de l’ajouter à vos variables sécurisées à l’intérieur d’Azure DevOps afin qu’il ne soit pas visible pendant le build.

Vous avez 3 façons de fournir le chemin du jar de bundletool pour utiliser les tasks suivantes:

  • Utilisez directement la task InstallBundletool comme nous venons de le faire
  • Définissez la variable bundletoolpath sur vos agents (facile à faire si vous utilisez Azure DevOps On Premise)
  • Fournissez le chemin du jar bundletool directement avec le paramètre facultatif bundletoolJarPath

Convertissez votre Android App Bundle en Apk universel

La prochaine task disponible nous permettra de générer un apk qui pourra être distribué sur App Center.

- task: AabConvertToUniversalApk@1
  inputs:
    aabFilePath: 'path/to/*.aab'
    keystoreFilePath: '$(keyStore.secureFilePath)'
    keystorePassword: '$(keystore.password)'
    keystoreAlias: '$(key.alias)'
    keystoreAliasPassword: '$(key.password)'
    outputFolder: 'path/to/folder' # Optional. Default is: $(Build.SourcesDirectory)
    bundletoolJarPath: 'path/to/bundletooljar' # Optional if you use the InstallBundletool task or set the bundletoolpath environment variable.

Cette task prend un Android App Bundle comme paramètre et crée un apk universel qui contiendra toutes les configurations pour tous les appareils. Pour générer cet apk bundletool a besoin d’un keystore pour le signer. Pour récupérer votre keystore à partir de vos fichiers sécurisés, n’oubliez pas d’utiliser la tâche DownloadSecureFile disponible par défaut dans Azure DevOps comme ceci:

- task: DownloadSecureFile@1
  name: keyStore # Keystore variable to use to get the secure file path like above
  displayName: "Download keystore from secure files"
  inputs:
    secureFile: 'production.jks' # Your kestore here

Exécutez des commandes personnalisées avec bundletool

Évidemment, vous voulez probablement exécuter une commande personnalisée avec Bundletool, c’est pourquoi je fournis une autre task simplement nommée Bundletool qui s’utilise simplement comme ceci:

- task: Bundletool@1
  inputs:
    bundletoolArguments: 'version' # Default value
    bundletoolJarPath: 'path/to/bundletooljar' # Optional if you use the InstallBundletool task or set the bundletoolpath environment variable.

Avec cet argument, vous obtiendrez la version de bundletool utilisée.

Touche finale

Vous avez maintenant la possibilité de créer, signer et distribuer votre Android App Bundle avec App Center et de lancer les commandes bundletool que vous souhaitez. Comme d’habitude, vous trouverez le code source dans ce dépôt Github avec un exemple complet basé sur une application Xamarin Android.

Sources:

Happy coding!

Vous avez aimé ce tutoriel ? Laissez une étoile sur le répertoire Github associé !

N'hésitez pas à me suivre sur pour ne pas rater mon prochain tutoriel !