Compartir vía


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.

  1. 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.
  2. En el proyecto de Azure DevOps, seleccione Canalizaciones>Nueva canalización o Crear canalización si esta canalización es la primera del proyecto.
  3. Seleccione GitHub como la ubicación del código fuente.
  4. En la pantalla Seleccionar un repositorio, seleccione el repositorio de ejemplo de Android bifurcado.
  5. En la pantalla Configurar su canalización, seleccione Android.
  6. Azure Pipelines proporciona una canalización de inicio basada en la plantilla de Android. Revisión del código de canalización
  7. Seleccione Guardar y ejecutar.
  8. 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 alphabeta, 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.

  1. Descargue el almacén de claves y almacénelo como un archivo seguro en la biblioteca de Azure Pipelines.

  2. Cree variables para keystore.password, key.alias y key.password en un grupo de variables.

En la canalización de YAML:

  1. 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
    
  2. 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)
    
  3. 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.