Compilación, prueba e implementación de aplicaciones Android
Azure DevOps Services
En este inicio rápido se muestra cómo configurar una canalización YAML en Azure Pipelines para compilar, probar e implementar automáticamente una aplicación de Android.
Requisitos previos
Una organización y un proyecto de Azure DevOps donde tiene permiso para crear canalizaciones e implementar aplicaciones. Para crear un proyecto, consulte Creación de un proyecto en Azure DevOps.
Una cuenta de GitHub.
Importante
Durante los procedimientos de GitHub, es posible que se le pida que cree una conexión de servicio de GitHub o que se redirija a GitHub para iniciar sesión, instalar Azure Pipelines, autorizar Azure Pipelines o autenticarse en organizaciones de GitHub. Siga las instrucciones que aparecen en pantalla para completar el proceso. Para más información, consulte Acceso a repositorios de GitHub.
Creación y ejecución de la canalización
Realice las siguientes tareas para configurar una canalización para una aplicación de Android sencilla.
- Para obtener el código de la aplicación de ejemplo, bifurque el repositorio de la aplicación de ejemplo de Android en la cuenta de GitHub.
- En el proyecto de Azure DevOps, seleccione Canalizaciones>Nueva canalización o Crear canalización si esta canalización es la primera del proyecto.
- Seleccione GitHub como la ubicación del código fuente.
- En la pantalla Seleccionar un repositorio, seleccione el repositorio de ejemplo de Android bifurcado.
- En la pantalla Configurar su canalización, seleccione Android.
- Azure Pipelines proporciona una canalización de inicio basada en la plantilla de Android. Revisión del código de canalización
- Seleccione Guardar y ejecutar.
- Opcionalmente, edite el mensaje Confirmar y proporcione una descripción. A continuación, seleccione Guardar y ejecutar de nuevo para confirmar el archivo azure-pipelines.yml en el repositorio e iniciar una compilación.
En la página de ejecución de compilación se muestran los detalles y el progreso de la compilación. Si desea ver la canalización en acción, seleccione Trabajo en la parte inferior de la página.
Ahora ya tiene una canalización YAML de Android en funcionamiento, azure-pipelines.yml, en el repositorio que está lista para que la personalice.
Personalización de la canalización
Para realizar cambios en la canalización, seleccione Editar en la página de la canalización. En las secciones siguientes se describen algunas formas comunes de personalizar la canalización de Android.
Configuración de Gradle
La canalización de YAML de inicio usa Gradle, una herramienta de compilación de código abierto común para proyectos de Android. Para obtener más información, consulte Tarea de Gradle.
En la tarea de ejemplo, el parámetro tasks
compila el tipo de compilación assembleDebug
. Puede ajustar el valor tasks
de las variantes de compilación que desee, como build
, test
y assembleRelease
.
La tarea de ejemplo también supone que el archivo gradlew
está en la raíz del repositorio. En caso contrario, ajuste también los valores workingDirectory
y gradleWrapperFile
en consecuencia.
El workingDirectory
debe ser similar a la raíz del repositorio, como AndroidApps/MyApp
o $(system.defaultWorkingDirectory)/AndroidApps/MyApp
. La ruta de acceso gradleWrapperFile
debe ser similar a la raíz del repositorio, como 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'
Para obtener más información sobre el uso de tareas de Gradle, consulte Uso de tareas en la documentación de Gradle. Para obtener más información sobre las tareas de compilación, consulte Compilar un APK de depuración y Configurar variantes de compilación en la documentación de desarrollo de Google Android.
Firmar y alinear el paquete de Android (APK)
Para que se ejecute en un dispositivo en lugar de en un emulador, el paquete de aplicaciones de Android (APK) debe estar firmado. La herramienta zipaligning reduce la memoria RAM que consume la aplicación. Si la compilación aún no ha firmado ni ha realizado el proceso zipalign al APK, agregue la tarea Firma para Android a la canalización. Para más información, consulte Firma de una aplicación móvil.
Por seguridad, almacene jarsignerKeystorePassword
y jarsignerKeyPassword
en las variables secretas y use esas variables en la canalización.
- task: AndroidSigning@2
inputs:
apkFiles: '**/*.apk'
jarsign: true
jarsignerKeystoreFile: 'pathToYourKeystoreFile'
jarsignerKeystorePassword: '$(jarsignerKeystorePassword)'
jarsignerKeystoreAlias: 'yourKeystoreAlias'
jarsignerKeyPassword: '$(jarsignerKeyPassword)'
zipalign: true
Prueba en el emulador de Android
Para instalar y ejecutar el emulador de Android, agregue la tarea Bash a la canalización y pegue el código siguiente. El emulador se inicia como un proceso en segundo plano y está disponible en tareas posteriores. Organice los parámetros del emulador para que se ajusten a su entorno de prueba.
#!/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"
Prueba en dispositivos hospedados en Azure
Para probar la aplicación en un laboratorio hospedado de dispositivos de Android en Visual Studio App Center, agregue la tarea Prueba de App Center a la canalización.
Esta tarea requiere una cuenta de evaluación gratuita de App Center, que debe convertirse en de pago después de 30 días para seguir usando el laboratorio de pruebas. Regístrese para obtener una cuenta de App Center antes de usar esta tarea.
En el ejemplo siguiente se ejecuta un conjunto de pruebas de App Center. La tarea usa una conexión de servicio que debe configurar.
Para obtener la sintaxis y la referencia de tareas completas, consulte Tarea de prueba de App Center. Para más información, consulte Uso de Azure DevOps para pruebas de interfaz de usuario.
- 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'
Retención de artefactos con el registro de compilación
Para almacenar el APK con el registro de compilación o la prueba e implementarlo en canalizaciones posteriores, agregue las tareas Copiar archivos y Publicar artefactos de compilación a la canalización. Para obtener más información, consulte Publicación y descarga de artefactos de canalización.
- task: CopyFiles@2
inputs:
contents: '**/*.apk'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: $(Build.ArtifactStagingDirectory)
artifactName: MyBuildOutputs
Implementación en App Center
Para distribuir una aplicación a un grupo de evaluadores o usuarios beta, o promover la aplicación a Intune o a Google Play, agregue la tarea Distribución de App Center. La tarea requiere una cuenta gratuita de App Center que se mantiene gratuita.
En el ejemplo siguiente se distribuye una aplicación a los usuarios. Para obtener la sintaxis y la referencia de tareas completas, consulte Distribución de App Center. Para más información, consulte Implementación de compilaciones de 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'
Instalación de la extensión de Google Play e implementación en Google Play
Para automatizar la interacción con Google Play, instale la extensión de Google Play y, a continuación, utilice las siguientes tareas. De forma predeterminada, estas tareas se autentican en Google Play mediante una conexión de servicio que debe configurar.
Versión
Para lanzar una nueva versión de la aplicación de Android en Play Store de Google, agregue la tarea Versión de Google Play a la canalización.
- task: GooglePlayRelease@4
inputs:
apkFile: '**/*.apk'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
track: 'internal'
Promoción
Para promocionar una actualización de una aplicación de Android publicada anteriormente de una pista a otra, como alpha
→ beta
, agregue la tarea Promocionar en Google Play a la canalización.
- task: GooglePlayPromote@3
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
sourceTrack: 'internal'
destinationTrack: 'alpha'
Aumento del lanzamiento
Para aumentar el porcentaje de lanzamiento de una aplicación que se lanzó anteriormente en la pista rollout
, agregue la tarea Aumentar el lanzamiento en Google Play a la canalización.
- task: GooglePlayIncreaseRollout@2
inputs:
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
userFraction: '0.5' # 0.0 to 1.0 (0% to 100%)
Estado de actualización
Para actualizar el estado de lanzamiento de una aplicación que se lanzó anteriormente en la pista rollout
, agregue la tarea Actualización de estado de Google Play a la canalización.
- task: GooglePlayStatusUpdate@2
inputs:
authType: ServiceEndpoint
packageName: 'com.yourCompany.appPackageName'
serviceEndpoint: 'yourGooglePlayServiceConnectionName'
status: 'inProgress' # draft | inProgress | halted | completed
Creación de un lote de aplicaciones
Puede compilar y firmar una agrupación de aplicaciones con un script en línea y un archivo seguro.
Descargue el almacén de claves y almacénelo como un archivo seguro en la biblioteca de Azure Pipelines.
Cree variables para
keystore.password
,key.alias
ykey.password
en un grupo de variables.
En la canalización de YAML:
Agregue la tarea Descargar archivo seguro para descargar el archivo seguro app.keystore.
- task: DownloadSecureFile@1 name: keyStore displayName: "Download keystore from secure files" inputs: secureFile: app.keystore
Use la tarea Bash con un script de Bash para compilar y firmar la agrupación de aplicaciones.
- 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)
Use la tarea Copiar archivos para copiar la agrupación de aplicaciones.
- task: CopyFiles@2 displayName: 'Copy deliverables' inputs: SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)' Contents: '*.aab' TargetFolder: 'drop'
Desde aquí, puede crear y guardar un artefacto mediante la tarea Publicar artefacto de compilación o usar la extensión de Google Play para publicar la agrupación de aplicaciones.
Extensiones relacionadas
- Codified Security de Codified Security
- Google Play de Microsoft
- Mobile App Tasks for iOS and Android de James Montemagno
- Mobile Testing Lab de Perfecto Mobile
- React Native de Microsoft