- Azure
- Azure DevOps
- Xamarin
- Xamarin.Android
Xamarin a introduit la prise en charge des Android App Bundle il y a quelques semaines, il est maintenant temps d’en profiter!
L’Android App Bundle est un package qui permet à l’utilisateur de télécharger uniquement ce dont votre application a besoin pour s’exécuter sur ses appareils. Par exemple, si votre écran a une grande résolution, l’application utilisera probablement les ressources du dossier mipmap-xxxhdpi
, alors quel est le but de télécharger d’autres dossiers de résolutions ? Aucun, c’est inutile.
En obtenant uniquement ce dont vous avez besoin pour votre application, cela permettra:
Avec cela en tête, commençons!
Passons à Azure DevOps et créons un nouveau pipeline.
Dans l’onglet Pipelines, créez un New pipeline et suivez les 4 étapes pour obtenir le code source à partir du repository approprié. Azure DevOps créera automatiquement un nouveau fichier azure-pipelines.yml
à la racine du dossier de votre projet. C’est à cet endroit que la définition du job sera définie et ensuite interprétée par Azure DevOps.
Nous devrons signer notre application Android avec un keystore. Créez-le et uploadez-le dans l’onglet Pipelines > Library > Secure files, afin qu’il soit accessible par l’agent de génération. Dans ce tutoriel, le keystore sera nommé production.jks.
Pour des raisons de sécurité, nous devrons créer un groupe de variables pour stocker l’alias et les mots de passe associés à ce keystore. Si vous n’êtes pas familier avec cela, vous pouvez consulter mon précédent tutoriel à ce sujet.
Pour ce tutoriel, le groupe de variables sera appelé xamarin-android-aab
. Vous n’aurez que 3 variables dedans:
Nous devons restaurer les packages Nuget de notre projet et charger notre groupe de variables:
trigger:
- master
pool:
vmImage: 'macos-latest'
variables:
- group: xamarin-android-aab
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '**/*.sln'
Pour pouvoir créer un Android App Bundle, nous devons utiliser la dernière version du SDK Xamarin disponible maintenant. Pour le spécifier, nous devons sélectionner la bonne version mono sur notre agent. Pour plus de détails sur le choix de votre version mono, veuillez consulter la documentation Microsoft complète. Actuellement, la dernière version est 6.6.0
.
Précisons-le donc dans notre azure-pipelines.yml
:
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 6_6_0
displayName: "Select the Xamarin SDK version"
enabled: true
Cela fait, nous pouvons maintenant commencer à compiler notre projet. Traditionellement, lorsque vous souhaitez générer un apk
pour votre application Xamarin.Android, vous utilisez la task XamarinAndroid@1
et la task AndroidSigning@3
pour compiler et signer votre package. Pour le moment, ces deux tasks combinées ne vous permettent pas de générer un Android App Bundle. Par conséquent, les équipes Microsoft ont fourni une solution: les lignes de commande!
Pour obtenir ce que nous voulons, nous ajouterons deux tasks:
Revenons à notre fichier de configuration yaml
:
- task: DownloadSecureFile@1
name: keyStore
displayName: "Download keystore from secure files"
inputs:
secureFile: production.jks
- task: Bash@3
displayName: "Build and sign App Bundle"
inputs:
targetType: "inline"
script: |
msbuild -restore $(Build.SourcesDirectory)/XamarinAndroidAab/*.csproj -t:SignAndroidPackage -p:AndroidPackageFormat=aab -p:Configuration=$(buildConfiguration) -p:AndroidKeyStore=True -p:AndroidSigningKeyStore=$(keyStore.secureFilePath) -p:AndroidSigningStorePass=$(keystore.password) -p:AndroidSigningKeyAlias=$(key.alias) -p:AndroidSigningKeyPass=$(key.password)
N’oubliez pas de définir la variable buildConfiguration
à Release
comme ci-dessous.
variables:
- group: xamarin-android-aab
- name: buildConfiguration
value: 'Release'
La task DownloadSecureFile@1
nous permet d’obtenir le keystore de nos fichiers sécurisés. Avec la task Bash@3
nous pouvons compiler notre projet en utilisant la ligne de commande msbuild
. Cela signera également notre application, rien de plus à faire!
Notez que le paramètre AndroidPackageFormat
définit le format du package dont nous avons besoin (Android App Bundle), avec cette valeur définie, vous n’avez pas besoin de configurer votre csproj
Xamarin.Android avec plus d’options.
Maintenant, si vous exécutez votre job pour la première fois, vous obtiendrez un message d’avertissement vous demandant de donner accès à vos fichiers sécurisés pour le keystore:
Autorisez-le en cliquant sur Permit
, et votre build reprendra.
La dernière étape consiste à générer et publier le fichier .aab
afin que vous puissiez ensuite l’upload dans le store de votre choix.
- task: CopyFiles@2
displayName: 'Copy deliverables'
inputs:
SourceFolder: '$(Build.SourcesDirectory)/XamarinAndroidAab/bin/$(buildConfiguration)'
Contents: '*.aab'
TargetFolder: 'drop'
- task: PublishBuildArtifacts@1
displayName: 'Publish release'
inputs:
pathToPublish: 'drop'
artifactName: 'release'
Si tout est fait correctement, vous pourrez télécharger votre fichier aab
depuis Azure DevOps:
Si vous souhaitez générer un apk
pour vérifier quel type de configurations de périphérique votre application prend en charge à partir de votre Android App Bundle, vous pouvez utiliser le bundletool
avec la commande suivante:
bundletool build-apks --bundle=/path_to/my_app.aab --output=/path_to/my_app.apks
Plus de détails sur le bundletool
sont disponibles sur la documentation Android.
J’ai créé quelques extensions pour vous aider à utiliser bundletool directement dans vos pipelines, jetez un œil à mon tutoriel à ce sujet.
Sources:
Vous trouverez un exemple de code sur ce répertoire Github.
Happy codding !
Vous avez aimé ce tutoriel ? Laissez une étoile sur le répertoire Github associé !