Share via


Android-apps bouwen, testen en implementeren

Azure DevOps Services

In deze quickstart ziet u hoe u een YAML-pijplijn instelt in Azure Pipelines om automatisch een Android-app te bouwen, testen en implementeren.

Vereisten

  • Een Azure DevOps-organisatie en -project waar u gemachtigd bent om pijplijnen te maken en apps te implementeren. Zie Een project maken in Azure DevOps om een project te maken.

  • Een GitHub-account.

    Belangrijk

    Tijdens GitHub-procedures wordt u mogelijk gevraagd om een GitHub-serviceverbinding te maken of om te worden omgeleid naar GitHub om u aan te melden, Azure Pipelines te installeren, Azure Pipelines te autoriseren of te verifiëren bij GitHub-organisaties. Volg de instructies op het scherm om het proces te voltooien. Zie Toegang tot GitHub-opslagplaatsen voor meer informatie.

De pijplijn maken en uitvoeren

Ga als volgt te werk om een pijplijn in te stellen voor een eenvoudige Android-toepassing.

  1. Als u de code voor de voorbeeld-app wilt ophalen, forkt u de opslagplaats voor de Android-voorbeeld-app naar uw GitHub-account.
  2. Selecteer in uw Azure DevOps-project pijplijnen>een nieuwe pijplijn of maak een pijplijn als deze pijplijn de eerste is in het project.
  3. Selecteer GitHub als de locatie van uw broncode.
  4. Selecteer in het scherm Een opslagplaats selecteren uw geforkte Android-voorbeeldopslagplaats.
  5. Selecteer Android in het scherm Uw pijplijn configureren.
  6. Azure Pipelines biedt een starterspijplijn op basis van de Android-sjabloon . Controleer de pijplijncode.
  7. Selecteer Opslaan en uitvoeren.
  8. Bewerk desgewenst het doorvoerbericht en geef een beschrijving op. Selecteer Vervolgens Opslaan en opnieuw uitvoeren om het azure-pipelines.yml-bestand door te voeren in uw opslagplaats en een build te starten.

Op de pagina voor het uitvoeren van de build worden details en voortgang van de build weergegeven. Als u de pijplijn in actie wilt bekijken, selecteert u Taak in het onderste gedeelte van de pagina.

U hebt nu een werkende Android YAML-pijplijn, azure-pipelines.yml, in uw opslagplaats die klaar is om aan te passen.

Uw pijplijn aanpassen

Als u wijzigingen wilt aanbrengen in uw pijplijn, selecteert u Bewerken op de pagina Pijplijn. In de volgende secties worden enkele veelgebruikte manieren beschreven om uw Android-pijplijn aan te passen.

Gradle configureren

De starter YAML-pijplijn maakt gebruik van Gradle, een algemeen opensource-buildhulpprogramma voor Android-projecten. Zie de Gradle-taak voor meer informatie.

In de voorbeeldtaak wordt met de tasks parameter het assembleDebug buildtype gebouwd. U kunt de tasks waarde aanpassen voor de gewenste buildvarianten, zoals build, testen assembleRelease.

Bij de voorbeeldtaak wordt ook ervan uitgegaan dat uw gradlew bestand zich in de hoofdmap van de opslagplaats bevindt. Zo niet, pas de workingDirectory waarden gradleWrapperFile dienovereenkomstig aan.

De workingDirectory moet vergelijkbaar zijn met de hoofdmap van de opslagplaats, zoals AndroidApps/MyApp of $(system.defaultWorkingDirectory)/AndroidApps/MyApp. Het gradleWrapperFile pad moet vergelijkbaar zijn met de hoofdmap van de opslagplaats, zoals AndroidApps/MyApp/gradlew of $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew.

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

Zie Taken gebruiken in de Gradle-documentatie voor meer informatie over het gebruik van Gradle-taken. Zie Build a debug APK and Configure build variants in the Google Android development documentation voor meer informatie over buildtaken.

Het Android-pakket ondertekenen en uitlijnen (APK)

Als u wilt uitvoeren op een apparaat in plaats van een emulator, moet het Android-toepassingspakket (APK) zijn ondertekend. Zipaligning vermindert het RAM-geheugen dat de toepassing verbruikt. Als uw build de APK nog niet ondertekent en zipalignt , voegt u de Android-ondertekeningstaak toe aan de pijplijn. Zie Een mobiele app ondertekenen voor meer informatie.

Voor beveiliging slaat u de jarsignerKeystorePassword en jarsignerKeyPassword in geheime variabelen op en gebruikt u deze variabelen in uw pijplijn.

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

Testen op de Android-emulator

Als u de Android-emulator wilt installeren en uitvoeren, voegt u de Bash-taak toe aan uw pijplijn en plakt u de volgende code. De emulator wordt gestart als achtergrondproces en is beschikbaar in latere taken. Rangschik de emulatorparameters zodat deze passen bij uw testomgeving.

#!/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 op door Azure gehoste apparaten

Als u uw app wilt testen in een gehost lab met Android-apparaten in Visual Studio App Center, voegt u de App Center-testtaak toe aan uw pijplijn.

Voor deze taak is een gratis proefaccount voor App Center vereist, dat na 30 dagen moet worden geconverteerd naar betaald om het testlab te kunnen blijven gebruiken. Meld u aan voor een App Center-account voordat u deze taak gebruikt.

In het volgende voorbeeld wordt een App Center-testpakket uitgevoerd. De taak maakt gebruik van een serviceverbinding die u moet instellen.

Zie App Center-testtaak voor de volledige taaksyntaxis en -verwijzing. Zie Azure DevOps gebruiken voor ui-tests voor meer informatie.

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

Artefacten behouden met de buildrecord

Als u uw APK-bestand wilt opslaan met de buildrecord of test en het wilt implementeren in volgende pijplijnen, voegt u de taken Copy Files and Publish Build Artifacts toe aan uw pijplijn. Zie Pijplijnartefacten publiceren en downloaden voor meer informatie.

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

Implementeren in App Center

Als u een app wilt distribueren naar een groep testers of bètagebruikers, of de app wilt promoveren naar Intune of Google Play, voegt u de taak App Center Distribueren toe. Voor de taak is een gratis App Center-account vereist dat gratis blijft.

In het volgende voorbeeld wordt een app gedistribueerd naar gebruikers. Zie App Center Distribueren voor de volledige taaksyntaxis en -verwijzing. Zie Azure DevOps-builds implementeren met App Center voor meer informatie.

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

De Google Play-extensie installeren en implementeren in Google Play

Als u de interactie met Google Play wilt automatiseren, installeert u de Google Play-extensie en gebruikt u vervolgens de volgende taken. Deze taken worden standaard geverifieerd bij Google Play met behulp van een serviceverbinding die u moet configureren.

Vrijgeven

Als u een nieuwe Android-app-versie wilt vrijgeven aan de Google Play Store, voegt u de Google Play Release-taak toe aan uw pijplijn.

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

Promoten

Als u een eerder uitgebrachte Android-toepassingsupdate van het ene nummer naar het andere wilt promoveren, zoals alphabeta, voegt u de Google Play Promote-taak toe aan uw pijplijn.

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

Implementatie verhogen

Als u het implementatiepercentage wilt verhogen van een toepassing die eerder voor het rollout spoor is uitgebracht, voegt u de implementatietaak google Play-verhoging toe aan uw pijplijn.

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

Status bijwerken

Als u de implementatiestatus wilt bijwerken voor een toepassing die eerder is uitgebracht voor het rollout bijhouden, voegt u de Google Play Status Update-taak toe aan uw pijplijn.

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

Een app-bundel maken

U kunt een app-bundel bouwen en ondertekenen met een inlinescript en een beveiligd bestand.

  1. Download uw sleutelarchief en sla het op als een beveiligd bestand in de Azure Pipelines-bibliotheek.

  2. Maak variabelen voor keystore.password, key.aliasen key.password in een variabelegroep.

In uw YAML-pijplijn:

  1. Voeg de taak Beveiligd bestand downloaden toe om het beveiligde bestand app.keystore te downloaden.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Gebruik de Bash-taak met een Bash-script om de app-bundel te bouwen en te ondertekenen.

    - 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. Gebruik de taak Bestanden kopiëren om de app-bundel te kopiëren.

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

Hier kunt u een artefact maken en opslaan met de taak BuildArtefact publiceren of de Google Play-extensie gebruiken om de app-bundel te publiceren.