- Azure
- Azure DevOps
- Xamarin
- Android
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.
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.
Tout d’abord, accédez à votre Azure DevOps et installez l’extension Bundletool Helper dans votre organisation.
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:
InstallBundletool
comme nous venons de le fairebundletoolpath
sur vos agents (facile à faire si vous utilisez Azure DevOps On Premise)bundletoolJarPath
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
É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.
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é !