Dela via


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.

  1. För att hämta koden för exempelappen förgrenar du Android-exempelapplagringsplatsen till ditt GitHub-konto.

  2. 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.

  3. Välj GitHub som plats för källkoden.

  4. På skärmen Välj en lagringsplats väljer du din förgrenade Android-exempellagringsplats.

  5. På skärmen Konfigurera din pipeline väljer du Android.

  6. Azure Pipelines tillhandahåller en startpipeline baserat på Android-mallen . Granska pipelinekoden.

  7. Välj Spara och kör.

    Skärmbild av knappen Spara och kör i en ny Android YAML-pipeline.

  8. 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, testoch 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@2
  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-27;google_apis;x86'

# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-27;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 > /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 alphabeta, 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.

  1. Ladda ned ditt nyckelarkiv och lagra det som en säker fil i Azure Pipelines-biblioteket.

  2. Skapa variabler för keystore.password, key.aliasoch key.password i en variabelgrupp.

I YAML-pipelinen:

  1. 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
    
  2. 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)
    
  3. 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.