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.
- Aby uzyskać kod przykładowej aplikacji, rozwidlenie przykładowego repozytorium aplikacji systemu Android na koncie usługi GitHub.
- W projekcie usługi Azure DevOps wybierz pozycję Potoki>Nowy potok lub Utwórz potok, jeśli ten potok jest pierwszym w projekcie.
- Wybierz pozycję GitHub jako lokalizację kodu źródłowego.
- Na ekranie Wybieranie repozytorium wybierz rozwidlenie przykładowego repozytorium systemu Android.
- Na ekranie Konfigurowanie potoku wybierz pozycję Android.
- Usługa Azure Pipelines udostępnia potok początkowy na podstawie szablonu systemu Android . Przejrzyj kod potoku.
- Wybierz pozycję Zapisz i uruchom.
- 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
, test
i 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 alpha
→ beta
, 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.
Pobierz magazyn kluczy i zapisz go jako bezpieczny plik w bibliotece usługi Azure Pipelines.
Utwórz zmienne dla
keystore.password
,key.alias
ikey.password
w grupie zmiennych.
W potoku YAML:
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
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)
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.
Powiązane rozszerzenia
- Skodyfikowane zabezpieczenia ze skodyfikowanych zabezpieczeń
- Google Play od firmy Microsoft
- Zadania aplikacji mobilnych dla systemów iOS i Android z James Montemagno
- Laboratorium mobile testing lab from Perfecto Mobile
- React Native firmy Microsoft