Sdílet prostřednictvím


Sestavování, testování a nasazování aplikací Android

Služby Azure DevOps

V tomto rychlém startu se dozvíte, jak nastavit kanál YAML v Azure Pipelines pro automatické sestavování, testování a nasazení aplikace pro Android.

Požadavky

  • Organizace a projekt Azure DevOps, kde máte oprávnění vytvářet kanály a nasazovat aplikace. Pokud chcete vytvořit projekt, přečtěte si téma Vytvoření projektu v Azure DevOps.

  • Účet GitHub.

    Důležité

    Během postupů GitHubu se může zobrazit výzva k vytvoření připojení ke službě GitHub nebo k přesměrování na GitHub, abyste se mohli přihlásit, nainstalovat Azure Pipelines, autorizovat Službu Azure Pipelines nebo ověřit v organizacích GitHubu. Dokončete proces podle pokynů na obrazovce. Další informace najdete v tématu Přístup k úložištím GitHub.

Vytvoření a spuštění potrubí

Pokud chcete nastavit kanál pro jednoduchou aplikaci pro Android, proveďte následující úlohy.

  1. Chcete-li získat kód ukázkové aplikace, vytvořte fork úložiště ukázkové aplikace pro Android do svého účtu na GitHubu.
  2. V projektu Azure DevOps vyberte Kanály>Nový kanál nebo Vytvořte kanál, pokud je tento kanál v projektu prvním kanálem.
  3. Jako umístění zdrojového kódu vyberte GitHub .
  4. Na obrazovce Vybrat úložiště vyberte ukázkové úložiště forku Androidu.
  5. Na obrazovce Konfigurace kanálu vyberte Android.
  6. Azure Pipelines poskytuje počáteční kanál založený na šabloně Androidu. Zkontrolujte kód kanálu.
  7. Zvolte Uložit a Spustit.
  8. Volitelně můžete upravit zprávu Potvrzení a zadat popis. Potom vyberte Uložit a spusťte znovu, aby se soubor azure-pipelines.yml uložil do úložiště a spustil sestavení.

Na stránce spuštění sestavení se zobrazují podrobnosti o sestavení a průběh. Pokud chcete sledovat svůj pipeline v akci, vyberte Úlohu v dolní části stránky.

Teď máte v úložišti funkční Android YAML pipeline, azure-pipelines.yml, který je připravený k přizpůsobení.

Přizpůsobte svou pipeline

Pokud chcete v kanálu udělat změny, na stránce kanálu vyberte Upravit . Následující části popisují některé běžné způsoby přizpůsobení kanálu Android.

Konfigurujte Gradle

Úvodní kanál YAML používá Gradle, běžný opensourcový nástroj sestavení pro projekty Android. Další informace najdete v úkolu Gradle.

V ukázkovém úkolu tasks parametr sestaví assembleDebug typ buildu. Můžete upravit tasks hodnotu požadovaných variant sestavení, například build, testa assembleRelease.

Ukázkový úkol také předpokládá, že váš gradlew soubor je v kořenovém adresáři úložiště. Pokud ne, upravte hodnoty workingDirectory a gradleWrapperFile odpovídajícím způsobem.

Mělo by se workingDirectory podobat kořenovému adresáři úložiště, například AndroidApps/MyApp nebo $(system.defaultWorkingDirectory)/AndroidApps/MyApp. Cesta gradleWrapperFile by měla být podobná kořenovému adresáři úložiště, například AndroidApps/MyApp/gradlew .$(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew

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

Další informace o používání úkolů Gradle najdete v tématu Použití úkolů v dokumentaci k Gradle. Další informace o úlohách sestavení naleznete v tématu Vytvoření ladicího APK a Konfigurace variant sestavení v dokumentaci k vývoji pro Google Android.

Podepsat a zarovnat Android balíček (APK)

Pokud chcete spustit na zařízení místo emulátoru, musí být podepsaný balíček aplikace pro Android (APK). Zazipování snižuje velikost paměti RAM, kterou aplikace využívá. Pokud váš build ještě nepodepisuje a neprovádí zarovnání APK, přidejte úlohu Podepisování Android aplikací do kanálu. Další informace najdete v tématu Podepsat mobilní aplikaci.

Pro zabezpečení uložte apksignerKeystorePassword a apksignerKeyPassword do tajných proměnných a použijte tyto proměnné ve vašem kanálu.

- task: AndroidSigning@3
  inputs:
    apkFiles: '**/*.apk' # Specify the APK files to sign
    apksignerKeystoreFile: 'pathToYourKeystoreFile' # Path to the keystore file
    apksignerKeystorePassword: '$(apksignerKeystorePassword)' # Use a secret variable for security
    apksignerKeystoreAlias: 'yourKeystoreAlias' # Alias for the keystore
    apksignerKeyPassword: '$(apksignerKeyPassword)' # Use a secret variable for security
    apksignerVersion: 'latest' # Use the latest version of apksigner
    apksignerArguments: '--verbose' # Optional: Additional arguments for apksigner
    zipalign: true # Enable zipalign to optimize APK
    zipalignVersion: 'latest' # Use the latest version of zipalign

Testování v emulátoru Androidu

Pokud chcete nainstalovat a spustit emulátor Androidu, přidejte do kanálu úlohu Bash a vložte následující kód. Emulátor se spustí jako proces na pozadí a je k dispozici v pozdějších úlohách. Uspořádejte parametry emulátoru tak, aby vyhovovaly vašemu testovacímu prostředí.

Důležité

Pokud používáte agenta hostovaného Microsoftem, použijte image agenta macOS s emulátorem Androidu. Aktuální emulátory Androidu vyžadují, aby bylo možné spustit hardwarovou akceleraci. Agenti Ubuntu hostovaní v Azure DevOps nepodporují hardwarovou akceleraci.

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      #!/usr/bin/env bash

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

      # Create emulator
      echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n xamarin_android_emulator -d "Nexus 10" -k 'system-images;android-35;google_apis;x86_64' --force

      echo "y" | $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 on > /dev/null 2>&1 &
      # Fixed quoting around "\r"
      $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"

Testování na zařízeních hostovaných v Azure

Pokud chcete svou aplikaci otestovat v hostovaném testovacím prostředí pro zařízení s Androidem v Centru aplikací sady Visual Studio, přidejte úlohu App Center Test do svého kanálu.

Tato úloha vyžaduje bezplatný zkušební účet App Center, který se po 30 dnech musí změnit na placený účet, aby bylo možné dál používat testovací prostředí. Před použitím této úlohy si zaregistrujte účet App Center.

Varování

31. března 2025 je naplánované vyřazení sady Visual Studio App Center. Další informace o časových osách podpory a doporučených alternativách.

Nejprve se zaregistrujte pomocí App Center.

Následující příklad spustí testovací sadu App Center. Úloha používá připojení služby, které musíte nastavit.

Úplnou syntaxi úlohy a referenční informace najdete v tématu Testovací úloha App Center. Další informace najdete v tématu Použití Azure DevOps pro testování uživatelského rozhraní.

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

Zachovejte artefakty se záznamem sestavení

Pokud chcete soubor APK uložit se záznamem sestavení nebo ho otestovat a nasadit v následných pipelinech, přidejte úlohy Kopírovat soubory a Publikovat artefakty sestavení do svého kanálu. Další informace najdete v tématu Publikování a stahování artefaktů kanálu.

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

Nasadit do App Center

Pokud chcete distribuovat aplikaci skupině testerů nebo beta uživatelů nebo zvýšit úroveň aplikace na Intune nebo Google Play, přidejte úlohu Distribuce App Center. Úkol vyžaduje bezplatný účet App Center , který zůstane zdarma.

Následující příklad distribuuje aplikaci uživatelům. Úplnou syntaxi úloh a referenční informace najdete v tématu Distribuce v App Center. Další informace najdete v tématu Nasazení buildů Azure DevOps pomocí 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'

Instalace rozšíření Google Play a nasazení do Google Play

Pokud chcete automatizovat interakci s Google Play, nainstalujte rozšíření Google Play a pak použijte následující úlohy. Ve výchozím nastavení se tyto úlohy ověřují ve službě Google Play pomocí připojení služby, které musíte nakonfigurovat.

Vydání

Pokud chcete uvolnit novou verzi aplikace pro Android do obchodu Google Play, přidejte úlohu Google Play Release do svého kanálu.

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

Propagovat

Pokud chcete přesunout dříve vydanou aktualizaci aplikace pro Android z jednoho úložiště do jiného, například alphabeta, přidejte úkol Google Play Promote do svého pracovního postupu.

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

Zvýšení zavedení

Pokud chcete zvýšit procento zavedení aplikace, která byla dříve vydána na trasu rollout, přidejte úlohu Zvýšení zavedení Google Play do svého procesu.

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

Aktualizovat stav

Pokud chcete aktualizovat stav uvedení pro aplikaci, která byla dříve vydána na rollout kanál, přidejte úlohu Aktualizace stavu Google Play do vaší pipeline.

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

Vytvoření sady aplikací

Sadu aplikací můžete sestavit a podepsat pomocí vloženého skriptu a zabezpečeného souboru.

  1. Stáhněte si úložiště klíčů a uložte ho jako zabezpečený soubor do knihovny Azure Pipelines.

  2. Vytvořte proměnné pro keystore.password, key.aliasa key.password ve skupině proměnných.

V kanálu YAML:

  1. Přidejte úlohu Stáhnout zabezpečený soubor pro stažení souboru zabezpečení app.keystore.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Pomocí úlohy Bash s Bash skriptem sestavte a podepište balíček aplikací.

    - 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. Ke zkopírování sady aplikací použijte úlohu Kopírovat soubory.

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

Odtud můžete buď vytvořit a uložit artefakt pomocí úlohy Publikovat artefakt sestavení, nebo pomocí rozšíření Google Play publikovat balíček aplikací.