Skapa, testa och distribuera Android-appar
Azure DevOps Services
Den här snabbstarten visar hur du konfigurerar en YAML-pipeline i Azure Pipelines för att automatiskt skapa, testa och distribuera en Android-app.
Förutsättningar
En Azure DevOps-organisation och ett projekt där du har behörighet att skapa pipelines och distribuera appar. Information om hur du skapar ett projekt finns i Skapa ett projekt i Azure DevOps.
Ett GitHub-konto.
Viktigt!
Under GitHub-procedurerna kan du uppmanas att skapa en GitHub-tjänstanslutning eller omdirigeras till GitHub för att logga in, installera Azure Pipelines, auktorisera Azure Pipelines eller autentisera till GitHub-organisationer. Följ anvisningarna på skärmen för att slutföra processen. Mer information finns i Åtkomst till GitHub-lagringsplatser.
Skapa och köra pipelinen
Utför följande uppgifter för att konfigurera en pipeline för ett enkelt Android-program.
- För att hämta koden för exempelappen förgrenar du Android-exempelapplagringsplatsen till ditt GitHub-konto.
- I ditt Azure DevOps-projekt väljer du Pipelines>Ny pipeline eller Skapa pipeline om den här pipelinen är den första i projektet.
- Välj GitHub som plats för källkoden.
- På skärmen Välj en lagringsplats väljer du din förgrenade Android-exempellagringsplats.
- På skärmen Konfigurera din pipeline väljer du Android.
- Azure Pipelines tillhandahåller en startpipeline baserat på Android-mallen . Granska pipelinekoden.
- Välj Spara och kör.
- Du kan också redigera incheckningsmeddelandet och ange en beskrivning. Välj sedan Spara och kör igen för att checka in azure-pipelines.yml filen till lagringsplatsen och starta en version.
På byggkörningssidan visas bygginformation och förlopp. Om du vill se din pipeline i praktiken väljer du Jobb på den nedre delen av sidan.
Nu har du en fungerande Android YAML-pipeline, azure-pipelines.yml, på din lagringsplats som är redo att anpassas.
Anpassa din pipeline
Om du vill göra ändringar i pipelinen väljer du Redigera på pipelinesidan. I följande avsnitt beskrivs några vanliga sätt att anpassa din Android-pipeline.
Konfigurera Gradle
Yaml-startpipelinen använder Gradle, ett vanligt byggverktyg med öppen källkod för Android-projekt. Mer information finns i Gradle-aktiviteten.
I exempeluppgiften skapar assembleDebug
parametern tasks
byggtypen. Du kan justera tasks
värdet för de byggvarianter som du vill använda, till exempel build
, test
och assembleRelease
.
Exempeluppgiften förutsätter också att gradlew
filen finns i roten på lagringsplatsen. Om inte justerar du workingDirectory
värdena och gradleWrapperFile
därefter.
workingDirectory
Bör likna roten på lagringsplatsen, till exempel AndroidApps/MyApp
eller $(system.defaultWorkingDirectory)/AndroidApps/MyApp
. Sökvägen gradleWrapperFile
bör likna roten på lagringsplatsen, till exempel AndroidApps/MyApp/gradlew
eller $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew
.
- task: Gradle@3
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleDebug'
Mer information om hur du använder Gradle-uppgifter finns i Använda uppgifter i Gradle-dokumentationen. Mer information om bygguppgifter finns i Skapa en felsöknings-APK och Konfigurera versionsvarianter i Google Android-utvecklingsdokumentationen.
Signera och justera Android-paketet (APK)
Om du vill köra på en enhet i stället för en emulator måste Android Application Package (APK) signeras. Zipaligering minskar det RAM-minne som programmet använder. Om din version inte redan signerar och zipalign APK lägger du till Android-signeringsaktiviteten i pipelinen. Mer information finns i Signera en mobilapp.
För säkerhet lagrar jarsignerKeystorePassword
du och jarsignerKeyPassword
i hemliga variabler och använder dessa variabler i din pipeline.
- task: AndroidSigning@2
inputs:
apkFiles: '**/*.apk'
jarsign: true
jarsignerKeystoreFile: 'pathToYourKeystoreFile'
jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
jarsignerKeystoreAlias: 'yourKeystoreAlias'
jarsignerKeyPassword: '$(jarsignerKeyPassword)'
zipalign: true
Testa på Android-emulatorn
Om du vill installera och köra Android-emulatorn lägger du till Bash-aktiviteten i din pipeline och klistrar in följande kod. Emulatorn startar som en bakgrundsprocess och är tillgänglig i senare uppgifter. Ordna emulatorparametrarna så att de passar din testmiljö.
#!/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"
Testa på Azure-värdbaserade enheter
Om du vill testa din app i ett värdbaserat labb med Android-enheter i Visual Studio App Center lägger du till App Center-testaktiviteten i din pipeline.
Den här uppgiften kräver ett kostnadsfritt utvärderingskonto för App Center , som måste konverteras till betalt efter 30 dagar för att fortsätta att använda testlabbet. Registrera dig för ett App Center-konto innan du använder den här uppgiften.
I följande exempel körs en App Center-testsvit. Uppgiften använder en tjänstanslutning som du måste konfigurera.
Fullständig aktivitetssyntax och referens finns i App Center-testaktivitet. Mer information finns i Använda Azure DevOps för användargränssnittstestning.
- 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'
Behåll artefakter med byggposten
Om du vill lagra APK-filen med byggposten eller testa och distribuera den i efterföljande pipelines lägger du till uppgifterna Kopiera filer och Publicera byggartefakter i pipelinen. Mer information finns i Publicera och ladda ned pipelineartefakter.
- task: CopyFiles@2
inputs:
contents: '**/*.apk'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: $(Build.ArtifactStagingDirectory)
artifactName: MyBuildOutputs
Distribuera till App Center
Om du vill distribuera en app till en grupp testare eller betaanvändare, eller flytta upp appen till Intune eller Google Play, lägger du till appcenterdistributionsaktiviteten. Uppgiften kräver ett kostnadsfritt App Center-konto som förblir kostnadsfritt.
I följande exempel distribueras en app till användare. Fullständig aktivitetssyntax och referens finns i Distribuera i App Center. Mer information finns i Distribuera Azure DevOps-versioner med 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'
Installera Google Play-tillägget och distribuera till Google Play
Om du vill automatisera interaktionen med Google Play installerar du Google Play-tillägget och använder sedan följande uppgifter. Som standard autentiseras dessa uppgifter till Google Play med hjälp av en tjänstanslutning som du måste konfigurera.
Frisläpp
Om du vill släppa en ny Android-appversion till Google Play Store lägger du till google play-versionsuppgiften i din pipeline.
- task: GooglePlayRelease@4
inputs:
apkFile: '**/*.apk'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
track: 'internal'
Marknadsföra
Om du vill höja upp en tidigare utgiven Android-programuppdatering från ett spår till ett annat, till exempel alpha
→ beta
, lägger du till uppgiften Google Play-upphöj till din pipeline.
- task: GooglePlayPromote@3
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
sourceTrack: 'internal'
destinationTrack: 'alpha'
Öka distributionen
Om du vill öka distributionsprocenten för ett program som tidigare släpptes till rollout
spåret lägger du till uppgiften Google Play Öka distribution i din pipeline.
- task: GooglePlayIncreaseRollout@2
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
userFraction: '0.5' # 0.0 to 1.0 (0% to 100%)
Uppdatera status
Om du vill uppdatera distributionsstatusen för ett program som tidigare släpptes till rollout
spåret lägger du till aktiviteten Google Play Status Update i din pipeline.
- task: GooglePlayStatusUpdate@2
inputs:
authType: ServiceEndpoint
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
status: 'inProgress' # draft | inProgress | halted | completed
Skapa ett apppaket
Du kan skapa och signera ett apppaket med ett infogat skript och en säker fil.
Ladda ned ditt nyckelarkiv och lagra det som en säker fil i Azure Pipelines-biblioteket.
Skapa variabler för
keystore.password
,key.alias
ochkey.password
i en variabelgrupp.
I YAML-pipelinen:
Lägg till uppgiften Ladda ned säker fil för att ladda ned säker app.keystore-fil.
- task: DownloadSecureFile@1 name: keyStore displayName: "Download keystore from secure files" inputs: secureFile: app.keystore
Använd Bash-uppgiften med ett Bash-skript för att skapa och signera apppaketet.
- 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)
Använd aktiviteten Kopiera filer för att kopiera apppaketet.
- task: CopyFiles@2 displayName: 'Copy deliverables' inputs: SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)' Contents: '*.aab' TargetFolder: 'drop'
Härifrån kan du antingen skapa och spara en artefakt med uppgiften Publicera skapa artefakt eller använda Google Play-tillägget för att publicera apppaketet.
Relaterade tillägg
- Kodifierad säkerhet från kodifierad säkerhet
- Google Play från Microsoft
- Mobilappsuppgifter för iOS och Android från James Montemagno
- Testlabb för mobila enheter från Perfecto Mobile
- React Native från Microsoft