Générer, tester et déployer des applications Android

Azure DevOps Services

Cette mise en route rapide vous montre comment configurer un pipeline YAML dans Azure Pipelines pour automatiquement construire, tester et déployer une application Android.

Prérequis

  • Une organisation et un projet Azure DevOps où vous avez la permission de créer des pipelines et de déployer des applications. Pour créer un projet, veuillez consulter la section Créer un projet dans Azure DevOps.

  • Un compte GitHub.

    Important

    Lors des procédures GitHub, il se peut que vous soyez invité à créer une connexion de service GitHub ou redirigé vers GitHub pour vous connecter, installer Azure Pipelines, autoriser Azure Pipelines ou vous authentifier auprès des organisations GitHub. Suivez les instructions à l’écran pour compléter le processus. Pour plus d’informations, veuillez consulter la section Accès aux référentiels GitHub.

Créer et exécuter le pipeline

Effectuez les tâches suivantes pour configurer un pipeline pour une application Android simple.

  1. Pour obtenir le code de l’application exemple, créez un fork du référentiel de l’application Android exemple sur votre compte GitHub.
  2. Dans votre projet Azure DevOps, sélectionnez Pipelines>Nouveau pipeline ou Créer un pipeline si ce pipeline est le premier dans le projet.
  3. Sélectionnez GitHub comme emplacement de votre code source.
  4. Sur l’écran Sélectionner un référentiel, sélectionnez votre référentiel forké de l’application Android exemple.
  5. Sur l’écran Configurer votre pipeline, sélectionnez Android.
  6. Azure Pipelines fournit un pipeline de démarrage basé sur le modèle Android. Examinez le code du pipeline.
  7. Sélectionnez Enregistrer et exécuter.
  8. Modifiez éventuellement le Commit message et fournissez une description. Ensuite, sélectionnez à nouveau Enregistrer et exécuter pour valider le fichier azure-pipelines.yml dans votre référentiel et démarrer une compilation.

La page d’exécution de la compilation affiche les détails et la progression de la compilation. Si vous voulez voir votre pipeline en action, sélectionnez Tâche dans la partie inférieure de la page.

Vous avez maintenant un pipeline YAML Android fonctionnel, azure-pipelines.yml, dans votre référentiel, prêt à être personnalisé.

Personnaliser votre pipeline

Pour apporter des modifications à votre pipeline, sélectionnez Modifier sur la page du pipeline. Les sections suivantes décrivent certaines façons courantes de personnaliser votre pipeline Android.

Configurer Gradle

Le pipeline YAML de démarrage utilise Gradle, un outil de build open-source courant pour les projets Android. Pour plus d’informations, veuillez consulter la section Tâche Gradle.

Dans l’exemple de tâche, le paramètre tasks construit le type de build assembleDebug. Vous pouvez ajuster la valeur tasks pour les variantes de build que vous souhaitez, telles que build, test, et assembleRelease.

L’exemple de tâche suppose également que votre fichier gradlew se trouve à la racine du référentiel. Sinon, ajustez les valeurs workingDirectory et gradleWrapperFile en conséquence.

Le workingDirectory devrait être similaire à la racine du référentiel, tel que AndroidApps/MyApp ou $(system.defaultWorkingDirectory)/AndroidApps/MyApp. Le chemin gradleWrapperFile devrait être similaire à la racine du référentiel, tel que AndroidApps/MyApp/gradlew ou $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew.

- task: Gradle@3
  inputs:
    workingDirectory: ''
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    publishJUnitResults: false
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'assembleDebug'

Pour plus d’informations sur l’utilisation des tâches Gradle, veuillez consulter la section Utilisation des tâches dans la documentation Gradle. Pour plus d’informations sur les tâches de build, veuillez consulter Construire un APK de débogage et Configurer les variantes de build dans la documentation de développement Android de Google.

Signer et aligner le package Android (APK)

Pour exécuter sur un appareil au lieu d’un émulateur, le Package d’Application Android (APK) doit être signé. Le Zipalign réduit la RAM que l’application consomme. Si votre build ne sign et zipalign pas encore l’APK, ajoutez la tâche Signature Android au pipeline. Pour plus d’informations, veuillez consulter la section Signer une application mobile.

Pour des raisons de sécurité, stockez le jarsignerKeystorePassword et jarsignerKeyPassword dans des variables secrètes et utilisez ces variables dans votre pipeline.

- task: AndroidSigning@2
  inputs:
    apkFiles: '**/*.apk'
    jarsign: true
    jarsignerKeystoreFile: 'pathToYourKeystoreFile'
    jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
    jarsignerKeystoreAlias: 'yourKeystoreAlias'
    jarsignerKeyPassword: '$(jarsignerKeyPassword)'
    zipalign: true

Tester sur l’émulateur Android

Pour installer et exécuter l’émulateur Android, ajoutez la tâche Bash à votre pipeline, et collez le code suivant. L’émulateur démarre en tant que processus en arrière-plan et est disponible dans les tâches ultérieures. Arrangez les paramètres de l’émulateur pour qu’ils correspondent à votre environnement de test.

#!/usr/bin/env bash

# Install AVD files
echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install 'system-images;android-30;google_apis;x86'

# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-30;google_apis;x86' --force

$ANDROID_HOME/emulator/emulator -list-avds

echo "Starting emulator"

# Start emulator in background
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot -no-window -no-audio -no-boot-anim -accel off > /dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'

$ANDROID_HOME/platform-tools/adb devices

echo "Emulator started"

Tester sur des appareils hébergés par Azure

Pour tester votre application dans un laboratoire hébergé de dispositifs Android dans le Visual Studio App Center, ajoutez la tâche Test App Center à votre pipeline.

Cette tâche nécessite un compte d’essai gratuit App Center, qui doit être converti en compte payant après 30 jours pour continuer à utiliser le laboratoire de test. Inscrivez-vous pour un compte App Center avant d’utiliser cette tâche.

L’exemple suivant exécute une suite de tests App Center. La tâche utilise une connexion de service que vous devez configurer.

Pour obtenir la syntaxe complète de la tâche et la référence, veuillez consulter la section Tâche Test App Center. Pour plus d’informations, veuillez consulter la section Utiliser Azure DevOps pour les tests UI.

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

Conserver les artefacts avec l’enregistrement de build

Pour stocker votre fichier APK avec l’enregistrement de build ou le tester et le déployer dans des pipelines ultérieurs, ajoutez les tâches Copier les fichiers et Publier les artefacts de build à votre pipeline. Pour plus d’informations, veuillez consulter la section Publier et télécharger des artefacts de pipeline.

- task: CopyFiles@2
  inputs:
    contents: '**/*.apk'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: $(Build.ArtifactStagingDirectory)
    artifactName: MyBuildOutputs

Déployer sur App Center

Pour distribuer une application à un groupe de testeurs ou d’utilisateurs bêta, ou promouvoir l’application vers Intune ou Google Play, ajoutez la tâche Distribution App Center. La tâche nécessite un compte App Center gratuit qui reste sans frais.

L’exemple suivant distribue une application aux utilisateurs. Pour obtenir la syntaxe complète de la tâche et la référence, veuillez consulter la section Distribution App Center. Pour plus d’informations, veuillez consulter la section Déployer les builds Azure DevOps avec App Center.

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the APK file you want to publish
    symbolsOption: 'Android'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

Installer l’extension Google Play et déployer sur Google Play

Pour automatiser l’interaction avec Google Play, installez l’extension Google Play puis utilisez les tâches suivantes. Par défaut, ces tâches s’authentifient auprès de Google Play en utilisant une connexion de service que vous devez configurer.

Version release

Pour publier une nouvelle version d’application Android sur le Google Play Store, ajoutez la tâche Publication Google Play à votre pipeline.

- task: GooglePlayRelease@4
  inputs:
    apkFile: '**/*.apk'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    track: 'internal'

Promouvoir

Pour promouvoir une mise à jour d’application Android précédemment publiée d’une piste à une autre, telle que alphabeta, ajoutez la tâche Promotion Google Play à votre pipeline.

- task: GooglePlayPromote@3
  inputs:
    packageName: 'com.yourCompany.appPackageName'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    sourceTrack: 'internal'
    destinationTrack: 'alpha'

Augmentation du lancement

Pour augmenter le pourcentage de déploiement d’une application qui a été précédemment publiée sur la piste rollout, ajoutez la tâche Augmenter le déploiement Google Play à votre pipeline.

- task: GooglePlayIncreaseRollout@2
  inputs:
    packageName: 'com.yourCompany.appPackageName'
    serviceEndpoint: 'yourGooglePlayServiceConnectionName'
    userFraction: '0.5' # 0.0 to 1.0 (0% to 100%)

État de la mise à jour

Pour mettre à jour le statut de déploiement d’une application qui a été précédemment publiée sur la piste rollout, ajoutez la tâche Mise à jour du statut Google Play à votre pipeline.

  - task: GooglePlayStatusUpdate@2
    inputs:
      authType: ServiceEndpoint
      packageName: 'com.yourCompany.appPackageName'
      serviceEndpoint: 'yourGooglePlayServiceConnectionName'
      status: 'inProgress' # draft | inProgress | halted | completed

Créer un ensemble d’applications

Vous pouvez construire et signer un bundle d’application avec un script inline et un fichier sécurisé.

  1. Téléchargez votre keystore et stockez-le comme un fichier sécurisé dans la bibliothèque Azure Pipelines.

  2. Créez des variables pour keystore.password, key.alias, et key.password dans un groupe de variables.

Dans votre pipeline YAML :

  1. Ajoutez la tâche Télécharger un fichier sécurisé pour télécharger le fichier sécurisé app.keystore.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Utilisez la tâche Bash avec un script Bash pour construire et signer le bundle d’application.

    - task: Bash@3
      displayName: "Build and sign App Bundle"
      inputs:
        targetType: "inline"
        script: |
          msbuild -restore $(Build.SourcesDirectory)/myAndroidApp/*.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)
    
  3. Utilisez la tâche Copier les fichiers pour copier le bundle d’application.

    - task: CopyFiles@2
      displayName: 'Copy deliverables'
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)'
        Contents: '*.aab'
        TargetFolder: 'drop'
    

À partir de là, vous pouvez soit créer et enregistrer un artefact avec la tâche Publier un artefact de build, soit utiliser l’extension Google Play pour publier le bundle d’application.