Erstellen, Testen und Bereitstellen von Android-Apps

Azure DevOps Services

In dieser Schnellstartanleitung erfahren Sie, wie Sie eine YAML-Pipeline in Azure Pipelines einrichten, um eine Android-App automatisch zu erstellen, zu testen und bereitzustellen.

Voraussetzungen

  • Eine Azure DevOps-Organisation und ein Projekt, in dem Sie die Berechtigung zum Erstellen von Pipelines und Bereitstellen von Apps haben. Informationen zum Erstellen eines Projekts finden Sie unter Erstellen eines Projekts in Azure DevOps.

  • Ein GitHub-Konto.

    Wichtig

    Während GitHub-Verfahren werden Sie möglicherweise aufgefordert, eine GitHub-Dienstverbindung zu erstellen, oder werden zu GitHub umgeleitet, um sich anzumelden, Azure Pipelines zu installieren, Azure Pipelines zu autorisieren oder sich bei GitHub-Organisationen zu authentifizieren. Folgen Sie den Anweisungen auf dem Bildschirm, um den Prozess abzuschließen. Weitere Informationen finden Sie unter Zugriff auf GitHub-Repositorys.

Erstellen und Ausführen der Pipeline

Führen Sie die folgenden Aufgaben aus, um eine Pipeline für eine einfache Android-Anwendung einzurichten.

  1. Forken Sie zum Abrufen des Codes für die Beispiel-App das Repository mit der Android-Beispiel-App in Ihrem GitHub-Konto.
  2. Wählen Sie in Ihrem Azure DevOps-Projekt Pipelines>Neue Pipeline oder Pipeline erstellen aus, falls diese Pipeline die erste Pipeline im Projekt ist.
  3. Wählen Sie GitHub als Speicherort für Ihren Quellcode aus.
  4. Wählen Sie auf dem Bildschirm Repository auswählen das geforkte Android-Beispielrepository aus.
  5. Wählen Sie auf dem Bildschirm Pipeline konfigurieren die Option Android aus.
  6. Azure Pipelines stellt eine Startpipeline basierend auf der Android-Vorlage bereit. Überprüfen Sie den Pipelinecode.
  7. Klicken Sie auf Speichern und ausführen.
  8. Bearbeiten Sie optional die Commitnachricht, und geben Sie eine Beschreibung an. Wählen Sie dann erneut Speichern und ausführen aus, um die Datei azure-pipelines.yml in Ihr Repository zu committen und einen Build zu starten.

Auf der Buildausführungsseite werden Builddetails und der Fortschritt angezeigt. Wenn Sie Ihre Pipeline in Aktion sehen möchten, wählen Sie im unteren Teil der Seite Auftrag aus.

Sie verfügen jetzt über eine funktionierende Android-YAML-Pipeline (azure-pipelines.yml) in Ihrem Repository, die Sie anpassen können.

Anpassen Ihrer Pipeline

Um Änderungen an Ihrer Pipeline vorzunehmen, wählen Sie auf der Pipelineseite Bearbeiten aus. In den folgenden Abschnitten werden einige gängige Methoden zum Anpassen Ihrer Android-Pipeline beschrieben.

Konfigurieren von Gradle

Die YAML-Startpipeline verwendet Gradle, ein gängiges Open-Source-Buildtool für Android-Projekte. Weitere Informationen finden Sie unter Gradle-Aufgabe.

Im Beispieltask erstellt der Parameter tasks den Buildtyp assembleDebug. Sie können den Wert tasks für die gewünschten Buildvarianten anpassen, z. B. build, test und assembleRelease.

Beim Beispieltask wird außerdem davon ausgegangen, dass sich die Datei gradlew im Stammverzeichnis des Repositorys befindet. Falls nicht, passen Sie die Werte workingDirectory und gradleWrapperFile entsprechend an.

Der workingDirectory-Wert sollte dem Stammverzeichnis des Repositorys ähneln, z. B. AndroidApps/MyApp oder $(system.defaultWorkingDirectory)/AndroidApps/MyApp. Der gradleWrapperFile-Pfad sollte dem Stammverzeichnis des Repositorys ähneln, z. B. AndroidApps/MyApp/gradlew oder $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew.

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

Weitere Informationen zur Verwendung von Gradle-Aufgaben finden Sie in der Gradle-Dokumentation unter Verwenden von Aufgaben. Weitere Informationen zu Buildaufgaben finden Sie in der Google Android-Entwicklungsdokumentation in den Abschnitten zum Erstellen eines Debug-APK und zum Konfigurieren von Buildvarianten.

Signieren und Ausrichten des Android-Pakets (APK)

Für die Ausführung auf einem Gerät anstelle eines Emulators muss das Android-Anwendungspaket (APK) signiert sein. Durch die Ausrichtung des APK mit Zipalign wird der von der Anwendung genutzte RAM reduziert. Wenn Ihr Build das APK noch nicht signiert und mit Zipalign ausrichtet, fügen Sie der Pipeline den Task für die Android-Signatur hinzu. Weitere Informationen finden Sie unter Signieren einer mobilen App.

Speichern Sie aus Sicherheitsgründen jarsignerKeystorePassword und jarsignerKeyPassword in Geheimnisvariablen, und verwenden Sie diese Variablen in Ihrer Pipeline.

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

Testen auf dem Android-Emulator

Fügen Sie zum Installieren und Ausführen des Android-Emulators der Pipeline den Bash-Task hinzu, und fügen Sie den folgenden Code ein. Der Emulator beginnt als Hintergrundprozess und ist in späteren Aufgaben verfügbar. Ordnen Sie die Emulatorparameter entsprechend Ihrer Testumgebung an.

#!/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"

Testen auf von Azure gehosteten Geräten

Um Ihre App in einem gehosteten Lab mit Android-Geräten in Visual Studio App Center zu testen, fügen Sie der Pipeline den Task App Center-Test hinzu.

Für diesen Task ist ein kostenloses Testkonto für App Center erforderlich, das nach 30 Tagen in ein kostenpflichtiges Konto umgewandelt werden muss, damit Sie das Testlab weiterhin verwenden können. Registrieren Sie sich für ein App Center-Konto, bevor Sie diesen Task verwenden.

Im folgenden Beispiel wird eine App Center-Testsammlung ausgeführt. Der Task verwendet eine Dienstverbindung, die Sie einrichten müssen.

Die vollständige Tasksyntax und -referenz finden Sie unter App Center-Testtask. Weitere Informationen finden Sie unter Verwenden von Azure DevOps für Benutzeroberflächentests.

- 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'

Beibehalten von Artefakten mit dem Builddatensatz

Um Ihre APK-Datei mit dem Builddatensatz zu speichern oder in nachfolgenden Pipelines zu testen und bereitzustellen, fügen Sie Ihrer Pipeline die Tasks Dateien kopieren und Buildartefakte veröffentlichen hinzu. Weitere Informationen finden Sie unter Veröffentlichen und Herunterladen von Pipelineartefakten.

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

Bereitstellen in App Center

Fügen Sie den Task App Center-Verteilung hinzu, um eine App an eine Gruppe von Testern oder Betabenutzern zu verteilen, oder stufen Sie die App auf Intune oder Google Play höher. Für den Task ist ein kostenloses App Center-Konto erforderlich, das kostenlos bleibt.

Im folgenden Beispiel wird eine App an Benutzer verteilt. Die vollständige Tasksyntax und -referenz finden Sie unter App Center-Verteilung. Weitere Informationen finden Sie unter Bereitstellen von Azure DevOps-Builds mit 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'

Installieren der Google Play-Erweiterung und Bereitstellen in Google Play

Installieren Sie zum Automatisieren der Interaktion mit Google Play die Google Play-Erweiterung, und verwenden Sie dann die folgenden Tasks. Standardmäßig authentifizieren sich diese Tasks bei Google Play mit einer Dienstverbindung, die Sie konfigurieren müssen.

Release

Wenn Sie eine neue Android-App-Version im Google Play Store veröffentlichen möchten, fügen Sie Ihrer Pipeline den Task Google Play Release hinzu.

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

Höherstufen

Wenn Sie ein zuvor veröffentlichtes Android-Anwendungsupdate von einem Track auf einen anderen heraufstufen möchten, z. B. von alpha auf beta, fügen Sie Ihrer Pipeline den Task Google Play Promote hinzu.

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

Erhöhen des Rollouts

Wenn Sie den Prozentsatz eines Rollouts einer Anwendung erhöhen möchten, die zuvor im Track rollout veröffentlicht wurde, fügen Sie Ihrer Pipeline den Task Google Play – Rollout erhöhen hinzu.

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

Aktualisierungsstatus

Um den Rolloutstatus für eine Anwendung zu aktualisieren, die zuvor im Track rollout veröffentlicht wurde, fügen Sie Ihrer Pipeline den Task Google Play – Statusaktualisierung hinzu.

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

Erstellen eines App-Bündels

Sie können ein App-Paket mit einem Inlineskript und einer sicheren Datei erstellen und signieren.

  1. Laden Sie Ihren Schlüsselspeicher herunter, und speichern Sie ihn als sichere Datei in der Azure Pipelines-Bibliothek.

  2. Erstellen Sie Variablen für keystore.password, key.alias und key.password in einer Variablengruppe.

In Ihrer YAML-Pipeline:

  1. Fügen Sie den Task Sichere Datei herunterladen hinzu, um die sichere Datei app.keystore herunterzuladen.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Verwenden Sie den Bash-Task mit einem Bash-Skript , um das App-Paket zu erstellen und zu signieren.

    - 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. Verwenden Sie den Task Dateien kopieren, um das App-Paket zu kopieren.

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

HIer können Sie nun entweder ein Artefakt mit dem Task Buildartefakte veröffentlichen erstellen und speichern oder die Google Play-Erweiterung verwenden, um das App-Paket zu veröffentlichen.