Compilare, testare e distribuire app Android
Servizi di Azure DevOps
Questa guida introduttiva illustra come configurare una pipeline YAML in Azure Pipelines per compilare, testare e distribuire automaticamente un'app Android.
Prerequisiti
Un'organizzazione e un progetto di Azure DevOps in cui si dispone dell'autorizzazione per creare pipeline e distribuire app. Per creare un progetto, vedere Creare un progetto in Azure DevOps.
Un account GitHub.
Importante
Durante le procedure di GitHub, potrebbe essere richiesto di creare una connessione al servizio GitHub o di essere reindirizzati a GitHub per accedere, installare Azure Pipelines, autorizzare Azure Pipelines o eseguire l'autenticazione alle organizzazioni GitHub. Seguire le istruzioni visualizzate per completare il processo. Per altre informazioni, vedere Accedere ai repository GitHub.
Creare ed eseguire la pipeline
Eseguire le attività seguenti per configurare una pipeline per una semplice applicazione Android.
- Per ottenere il codice per l'app di esempio, creare una copia tramite fork del repository dell'app di esempio Android nell'account GitHub.
- Nel progetto Azure DevOps selezionare Pipeline>nuova pipeline o Crea pipeline se la pipeline è la prima nel progetto.
- Selezionare GitHub come percorso del codice sorgente.
- Nella schermata Selezionare un repository selezionare il repository di esempio Android con fork.
- Nella schermata Configura la pipeline selezionare Android.
- Azure Pipelines offre una pipeline iniziale basata sul modello Android . Esaminare il codice della pipeline.
- Seleziona Salva ed Esegui.
- Facoltativamente, modificare il messaggio Commit e fornire una descrizione. Selezionare quindi Salva ed esegui di nuovo per eseguire il commit del file azure-pipelines.yml nel repository e avviare una compilazione.
La pagina di esecuzione della compilazione mostra i dettagli e lo stato di avanzamento della compilazione. Se si vuole controllare la pipeline in azione, selezionare Processo nella parte inferiore della pagina.
È ora disponibile una pipeline YAML android funzionante, azure-pipelines.yml, nel repository pronto per la personalizzazione.
Personalizzare la pipeline
Per apportare modifiche alla pipeline, selezionare Modifica nella pagina della pipeline. Le sezioni seguenti descrivono alcuni modi comuni per personalizzare la pipeline Android.
Configurare Gradle
La pipeline YAML iniziale usa Gradle, uno strumento di compilazione open source comune per i progetti Android. Per altre informazioni, vedere l'attività Gradle.
Nell'attività di esempio il tasks
parametro compila il assembleDebug
tipo di compilazione. È possibile modificare il tasks
valore per le varianti di compilazione desiderate, ad esempio build
, test
e assembleRelease
.
L'attività di esempio presuppone anche che il gradlew
file si trova nella radice del repository. In caso contrario, modificare i workingDirectory
valori e gradleWrapperFile
di conseguenza.
Deve workingDirectory
essere simile alla radice del repository, ad esempio AndroidApps/MyApp
o $(system.defaultWorkingDirectory)/AndroidApps/MyApp
. Il gradleWrapperFile
percorso deve essere simile alla radice del repository, ad esempio AndroidApps/MyApp/gradlew
o $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew
.
- task: Gradle@3
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleDebug'
Per altre informazioni sull'uso delle attività Gradle, vedere Uso delle attività nella documentazione di Gradle. Per altre informazioni sulle attività di compilazione, vedere Creare un APK di debug e Configurare le varianti di compilazione nella documentazione sullo sviluppo di Google Android.
Firmare e allineare il pacchetto Android (APK)
Per l'esecuzione in un dispositivo invece di un emulatore, è necessario firmare il pacchetto dell'applicazione Android (APK). Zipaligning riduce la RAM usata dall'applicazione. Se la compilazione non firma e comprime il file APK, aggiungere l'attività Di firma Android alla pipeline. Per altre informazioni, vedere Firmare un'app per dispositivi mobili.
Per la sicurezza, archiviare e jarsignerKeystorePassword
jarsignerKeyPassword
in variabili segrete e usare tali variabili nella pipeline.
- task: AndroidSigning@2
inputs:
apkFiles: '**/*.apk'
jarsign: true
jarsignerKeystoreFile: 'pathToYourKeystoreFile'
jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
jarsignerKeystoreAlias: 'yourKeystoreAlias'
jarsignerKeyPassword: '$(jarsignerKeyPassword)'
zipalign: true
Eseguire test nell'emulatore Android
Per installare ed eseguire l'emulatore Android, aggiungere l'attività Bash alla pipeline e incollare il codice seguente. L'emulatore viene avviato come processo in background ed è disponibile nelle attività successive. Disporre i parametri dell'emulatore per adattarsi all'ambiente di test.
#!/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"
Testare nei dispositivi ospitati in Azure
Per testare l'app in un lab ospitato di dispositivi Android in Visual Studio App Center, aggiungere l'attività Test di App Center alla pipeline.
Questa attività richiede un account di valutazione gratuito di App Center , che deve essere convertito in a pagamento dopo 30 giorni per continuare a usare il lab di test. Iscriversi per ottenere un account App Center prima di usare questa attività.
L'esempio seguente esegue un gruppo di test di App Center. L'attività usa una connessione al servizio che è necessario configurare.
Per la sintassi completa delle attività e informazioni di riferimento, vedere Attività test di App Center. Per altre informazioni, vedere Uso di Azure DevOps per il test dell'interfaccia utente.
- 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'
Mantenere gli artefatti con il record di compilazione
Per archiviare il file APK con il record di compilazione o il test e distribuirlo nelle pipeline successive, aggiungere le attività Copia file e Pubblica artefatti di compilazione alla pipeline. Per altre informazioni, vedere Pubblicare e scaricare gli artefatti della pipeline.
- task: CopyFiles@2
inputs:
contents: '**/*.apk'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: $(Build.ArtifactStagingDirectory)
artifactName: MyBuildOutputs
Distribuire in App Center
Per distribuire un'app a un gruppo di tester o utenti beta o promuovere l'app in Intune o Google Play, aggiungere l'attività Distribuzione di App Center. L'attività richiede un account App Center gratuito che rimane gratuito.
L'esempio seguente distribuisce un'app agli utenti. Per informazioni di riferimento e sintassi completa delle attività, vedere App Center Distribute. Per altre informazioni, vedere Distribuire build di Azure DevOps con 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'
Installare l'estensione Google Play e distribuirla in Google Play
Per automatizzare l'interazione con Google Play, installare l'estensione Google Play e quindi usare le attività seguenti. Per impostazione predefinita, queste attività eseguono l'autenticazione a Google Play usando una connessione al servizio che è necessario configurare.
Rilascio
Per rilasciare una nuova versione dell'app Android in Google Play Store, aggiungere l'attività Versione di Google Play alla pipeline.
- task: GooglePlayRelease@4
inputs:
apkFile: '**/*.apk'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
track: 'internal'
Promozione
Per alzare di livello un aggiornamento dell'applicazione Android rilasciato in precedenza da una traccia a un'altra, ad esempio alpha
→ beta
, aggiungere l'attività Promuovere Google Play alla pipeline.
- task: GooglePlayPromote@3
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
sourceTrack: 'internal'
destinationTrack: 'alpha'
Aumentare l'implementazione
Per aumentare la percentuale di implementazione di un'applicazione rilasciata in precedenza alla rollout
traccia, aggiungere l'attività Di aumento dell'implementazione di Google Play alla pipeline.
- task: GooglePlayIncreaseRollout@2
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
userFraction: '0.5' # 0.0 to 1.0 (0% to 100%)
Aggiorna stato
Per aggiornare lo stato di implementazione per un'applicazione rilasciata in precedenza alla rollout
traccia, aggiungere l'attività Google Play Status Update alla pipeline.
- task: GooglePlayStatusUpdate@2
inputs:
authType: ServiceEndpoint
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
status: 'inProgress' # draft | inProgress | halted | completed
Creare un bundle di app
È possibile compilare e firmare un bundle di app con uno script inline e un file sicuro.
Scaricare l'archivio chiavi e archiviarlo come file sicuro nella libreria di Azure Pipelines.
Creare variabili per
keystore.password
,key.alias
ekey.password
in un gruppo di variabili.
Nella pipeline YAML:
Aggiungere l'attività Scarica file sicuro per scaricare il file protetto app.keystore .
- task: DownloadSecureFile@1 name: keyStore displayName: "Download keystore from secure files" inputs: secureFile: app.keystore
Usare l'attività Bash con uno script Bash per compilare e firmare il bundle dell'app.
- 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)
Usare l'attività Copia file per copiare il bundle dell'app.
- task: CopyFiles@2 displayName: 'Copy deliverables' inputs: SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)' Contents: '*.aab' TargetFolder: 'drop'
Da qui è possibile creare e salvare un artefatto con l'attività Pubblica artefatto compilazione oppure usare l'estensione Google Play per pubblicare il bundle dell'app.
Estensioni correlate
- Sicurezza codificata dalla sicurezza codificata
- Google Play da Microsoft
- Attività di app per dispositivi mobili per iOS e Android da James Montemagno
- Lab di test per dispositivi mobili da Perfecto Mobile
- React Native da Microsoft