Udostępnij za pośrednictwem


Tworzenie, testowanie i wdrażanie aplikacji systemu Android

Azure DevOps Services

W tym przewodniku Szybki start pokazano, jak skonfigurować potok YAML w usłudze Azure Pipelines w celu automatycznego kompilowania, testowania i wdrażania aplikacji systemu Android.

Wymagania wstępne

  • Organizacja i projekt usługi Azure DevOps, w którym masz uprawnienia do tworzenia potoków i wdrażania aplikacji. Aby utworzyć projekt, zobacz Tworzenie projektu w usłudze Azure DevOps.

  • Konto usługi GitHub.

    Ważne

    Podczas procedur usługi GitHub może zostać wyświetlony monit o utworzenie połączenia usługi GitHub lub przekierowanie do usługi GitHub w celu zalogowania się, zainstalowania usługi Azure Pipelines, autoryzowania usługi Azure Pipelines lub uwierzytelniania w organizacjach usługi GitHub. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby ukończyć proces. Aby uzyskać więcej informacji, zobacz Access to GitHub repozytoria.

Tworzenie i uruchamianie potoku

Wykonaj następujące zadania, aby skonfigurować potok dla prostej aplikacji systemu Android.

  1. Aby uzyskać kod przykładowej aplikacji, rozwidlenie przykładowego repozytorium aplikacji systemu Android na koncie usługi GitHub.
  2. W projekcie usługi Azure DevOps wybierz pozycję Potoki>Nowy potok lub Utwórz potok, jeśli ten potok jest pierwszym w projekcie.
  3. Wybierz pozycję GitHub jako lokalizację kodu źródłowego.
  4. Na ekranie Wybieranie repozytorium wybierz rozwidlenie przykładowego repozytorium systemu Android.
  5. Na ekranie Konfigurowanie potoku wybierz pozycję Android.
  6. Usługa Azure Pipelines udostępnia potok początkowy na podstawie szablonu systemu Android . Przejrzyj kod potoku.
  7. Wybierz pozycję Zapisz i uruchom.
  8. Opcjonalnie zmodyfikuj komunikat Zatwierdzenia i podaj opis. Następnie wybierz pozycję Zapisz i uruchom ponownie, aby zatwierdzić plik azure-pipelines.yml w repozytorium i uruchomić kompilację.

Strona uruchamiania kompilacji zawiera szczegóły kompilacji i postęp. Jeśli chcesz obserwować działanie potoku, wybierz pozycję Zadanie w dolnej części strony.

Masz teraz działający potok YAML systemu Android, azure-pipelines.yml, w repozytorium, które jest gotowe do dostosowania.

Dostosowywanie potoku

Aby wprowadzić zmiany w potoku, wybierz pozycję Edytuj na stronie potoku. W poniższych sekcjach opisano kilka typowych sposobów dostosowywania potoku systemu Android.

Konfigurowanie narzędzia Gradle

Początkowy potok YAML używa narzędzia Gradle, wspólnego narzędzia do kompilacji typu open source dla projektów systemu Android. Aby uzyskać więcej informacji, zobacz zadanie narzędzia Gradle.

W przykładowym zadaniu tasks parametr kompiluje typ kompilacji assembleDebug . Możesz dostosować tasks wartość dla żądanych wariantów kompilacji, takich jak build, testi assembleRelease.

Przykładowe zadanie zakłada również, że plik gradlew znajduje się w katalogu głównym repozytorium. Jeśli nie, odpowiednio dostosuj workingDirectory wartości i gradleWrapperFile .

Element workingDirectory powinien być podobny do katalogu głównego repozytorium, takiego jak AndroidApps/MyApp lub $(system.defaultWorkingDirectory)/AndroidApps/MyApp. Ścieżka gradleWrapperFile powinna być podobna do katalogu głównego repozytorium, takiego jak AndroidApps/MyApp/gradlew lub $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew.

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

Aby uzyskać więcej informacji na temat korzystania z zadań narzędzia Gradle, zobacz Używanie zadań w dokumentacji narzędzia Gradle. Aby uzyskać więcej informacji na temat zadań kompilacji, zobacz Build a debug APK and Configure build variant (Tworzenie debugowania apk ) i Configure build variant (Konfigurowanie wariantów kompilacji ) w dokumentacji programowania w systemie Google Android.

Podpisywanie i wyrównywanie pakietu systemu Android (APK)

Aby można było uruchomić na urządzeniu zamiast emulatora, należy podpisać pakiet aplikacji systemu Android (APK). Spakowanie zmniejsza ilość pamięci RAM zużywanej przez aplikację. Jeśli kompilacja jeszcze nie podpisze i spakuj plik APK, dodaj zadanie Podpisywanie systemu Android do potoku. Aby uzyskać więcej informacji, zobacz Podpisywanie aplikacji mobilnej.

W przypadku zabezpieczeń zapisz jarsignerKeystorePassword zmienne tajne i jarsignerKeyPassword w zmiennych tajnych i użyj tych zmiennych w potoku.

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

Testowanie w emulatorze systemu Android

Aby zainstalować i uruchomić emulator systemu Android, dodaj zadanie powłoki Bash do potoku i wklej następujący kod. Emulator jest uruchamiany jako proces w tle i jest dostępny w kolejnych zadaniach. Rozmieść parametry emulatora, aby dopasować je do środowiska testowego.

#!/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"

Testowanie na urządzeniach hostowanych na platformie Azure

Aby przetestować aplikację w hostowanym laboratorium urządzeń z systemem Android w centrum aplikacji programu Visual Studio, dodaj zadanie Test centrum aplikacji do potoku.

To zadanie wymaga bezpłatnego konta wersji próbnej usługi App Center , które musi zostać przekonwertowane na płatne po upływie 30 dni, aby nadal korzystać z laboratorium testowego. Przed rozpoczęciem korzystania z tego zadania utwórz konto usługi App Center.

W poniższym przykładzie uruchomiono pakiet testowy usługi App Center. Zadanie używa połączenia z usługą, które należy skonfigurować.

Aby uzyskać pełną składnię i dokumentację zadania, zobacz App Center Test task (Zadanie testowe usługi App Center). Aby uzyskać więcej informacji, zobacz Using Azure DevOps for UI Testing (Używanie usługi Azure DevOps do testowania interfejsu użytkownika).

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

Zachowaj artefakty przy użyciu rekordu kompilacji

Aby zapisać plik APK przy użyciu rekordu kompilacji lub testu i wdrożyć go w kolejnych potokach, dodaj zadania Copy Files (Kopiowanie plików ) i Publish Build Artifacts (Publikuj artefakty kompilacji ) do potoku. Aby uzyskać więcej informacji, zobacz Publikowanie i pobieranie artefaktów potoku.

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

Wdrażanie w centrum aplikacji

Aby dystrybuować aplikację do grupy testerów lub użytkowników wersji beta albo podwyższyć poziom aplikacji do usługi Intune lub Google Play, dodaj zadanie Dystrybucji centrum aplikacji. Zadanie wymaga bezpłatnego konta usługi App Center , które pozostaje bezpłatne.

Poniższy przykład dystrybuuje aplikację do użytkowników. Aby uzyskać pełną składnię zadań i dokumentację, zobacz Dystrybucja centrum aplikacji. Aby uzyskać więcej informacji, zobacz Deploy Azure DevOps Builds with App Center (Wdrażanie kompilacji usługi Azure DevOps za pomocą centrum aplikacji).

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

Instalowanie rozszerzenia Google Play i wdrażanie w sklepie Google Play

Aby zautomatyzować interakcję ze sklepem Google Play, zainstaluj rozszerzenie Google Play, a następnie wykonaj następujące zadania. Domyślnie te zadania uwierzytelniają się w sklepie Google Play przy użyciu połączenia usługi, które należy skonfigurować.

Zwolnij

Aby zwolnić nową wersję aplikacji dla systemu Android do sklepu Google Play, dodaj zadanie Wydanie sklepu Google Play do potoku.

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

Promocja

Aby podwyższyć poziom wcześniej wydanej aktualizacji aplikacji systemu Android z jednego toru do innego, na przykład alphabeta, dodaj zadanie Podwyższanie poziomu sklepu Google Play do potoku.

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

Zwiększanie wdrożenia

Aby zwiększyć procent wdrożenia aplikacji, która została wcześniej wydana na rollout torze, dodaj zadanie Google Play Increase Rollout do potoku.

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

Stan aktualizacji

Aby zaktualizować stan wdrożenia aplikacji, która została wcześniej wydana w ścieżce rollout , dodaj zadanie Google Play Status Update do potoku.

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

Tworzenie pakietu aplikacji

Pakiet aplikacji można skompilować i podpisać za pomocą wbudowanego skryptu i bezpiecznego pliku.

  1. Pobierz magazyn kluczy i zapisz go jako bezpieczny plik w bibliotece usługi Azure Pipelines.

  2. Utwórz zmienne dla keystore.password, key.aliasi key.password w grupie zmiennych.

W potoku YAML:

  1. Dodaj zadanie Pobierz bezpieczny plik, aby pobrać bezpieczny plik app.keystore.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Użyj zadania powłoki Bash ze skryptem powłoki Bash , aby skompilować i podpisać pakiet aplikacji.

    - 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. Użyj zadania Copy Files (Kopiowanie plików), aby skopiować pakiet aplikacji.

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

W tym miejscu możesz utworzyć i zapisać artefakt za pomocą zadania Publikuj artefakt kompilacji lub użyć rozszerzenia Google Play, aby opublikować pakiet aplikacji.