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.
- Forken Sie zum Abrufen des Codes für die Beispiel-App das Repository mit der Android-Beispiel-App in Ihrem GitHub-Konto.
- Wählen Sie in Ihrem Azure DevOps-Projekt Pipelines>Neue Pipeline oder Pipeline erstellen aus, falls diese Pipeline die erste Pipeline im Projekt ist.
- Wählen Sie GitHub als Speicherort für Ihren Quellcode aus.
- Wählen Sie auf dem Bildschirm Repository auswählen das geforkte Android-Beispielrepository aus.
- Wählen Sie auf dem Bildschirm Pipeline konfigurieren die Option Android aus.
- Azure Pipelines stellt eine Startpipeline basierend auf der Android-Vorlage bereit. Überprüfen Sie den Pipelinecode.
- Klicken Sie auf Speichern und ausführen.
- 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.
Laden Sie Ihren Schlüsselspeicher herunter, und speichern Sie ihn als sichere Datei in der Azure Pipelines-Bibliothek.
Erstellen Sie Variablen für
keystore.password
,key.alias
undkey.password
in einer Variablengruppe.
In Ihrer YAML-Pipeline:
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
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)
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.
Verwandte Erweiterungen
- Codified Security von Codified Security
- Google Play von Microsoft
- Mobile App Tasks for iOS and Android von James Montemagno
- Mobile Testing Lab von Perfecto Mobile
- React Native von Microsoft