Поделиться через


Создание, тестирование и развертывание приложений для Android

Azure DevOps Services

В этом кратком руководстве показано, как настроить конвейер YAML в Azure Pipelines для автоматического создания, тестирования и развертывания приложения Android.

Необходимые компоненты

  • Организация и проект Azure DevOps, где у вас есть разрешение на создание конвейеров и развертывание приложений. Сведения о создании проекта см. в статье "Создание проекта в Azure DevOps".

  • Учетная запись GitHub.

    Внимание

    Во время процедур GitHub может потребоваться создать подключение службы GitHub или перенаправить на GitHub для входа, установки Azure Pipelines, авторизации Azure Pipelines или проверки подлинности в организациях GitHub. Следуйте инструкциям на экране, чтобы завершить процесс. Дополнительные сведения см. в разделе Access к репозиториям GitHub.

Создание и запуск конвейера

Выполните следующие задачи, чтобы настроить конвейер для простого приложения Android.

  1. Чтобы получить код для примера приложения, введите пример репозитория приложений Android в учетную запись GitHub.

  2. В проекте Azure DevOps выберите конвейер Pipelines>New или Create pipeline, если этот конвейер является первым в проекте.

  3. Выберите GitHub в качестве расположения исходного кода.

  4. На экране "Выбор репозитория" выберите вилку репозитория Android.

  5. На экране "Настройка конвейера" выберите Android.

  6. Azure Pipelines предоставляет начальный конвейер на основе шаблона Android . Просмотрите код конвейера.

  7. Выберите Сохранить и выполнить.

    Снимок экрана: кнопка

  8. При необходимости измените сообщение "Фиксация" и укажите описание. Затем нажмите кнопку "Сохранить и снова запустить ", чтобы зафиксировать файл azure-pipelines.yml в репозиторий и запустить сборку.

На странице выполнения сборки отображаются сведения о сборке и ходе выполнения. Если вы хотите просмотреть конвейер в действии, выберите задание в нижней части страницы.

Теперь у вас есть рабочий конвейер YamL Android, azure-pipelines.yml в репозитории, который готов к настройке.

Настройка конвейера

Чтобы внести изменения в конвейер, выберите "Изменить " на странице конвейера. В следующих разделах описываются некоторые распространенные способы настройки конвейера Android.

Настройка Gradle

Начальный конвейер YAML использует Gradle— общее средство сборки с открытым исходным кодом для проектов Android. Дополнительные сведения см. в задаче Gradle.

В примере задачи tasks параметр создает тип сборки assembleDebug . Можно настроить tasks значение для нужных вариантов сборки, таких как build, testи assembleRelease.

В примере задачи также предполагается, что gradlew файл находится в корне репозитория. Если нет, настройте workingDirectory соответствующие значения и gradleWrapperFile значения.

Должен workingDirectory быть похож на корневой каталог репозитория, например AndroidApps/MyApp или $(system.defaultWorkingDirectory)/AndroidApps/MyApp. gradleWrapperFile Путь должен быть похож на корневой каталог репозитория, например AndroidApps/MyApp/gradlew или $(system.defaultWorkingDirectory)/AndroidApps/MyApp/gradlew.

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

Дополнительные сведения об использовании задач Gradle см. в документации по использованию Gradle. Дополнительные сведения о задачах сборки см. в разделе "Создание отладочного APK" и настройка вариантов сборки в документации по разработке Google Android.

Подписывание и выравнивание пакета Android (APK)

Чтобы запустить на устройстве вместо эмулятора, необходимо подписать пакет приложений Android (APK). Zipaligning уменьшает объем ОЗУ, который использует приложение. Если сборка еще не подписывает и zipalign the APK, добавьте задачу подписывания Android в конвейер. Дополнительные сведения см. в разделе "Подписать мобильное приложение".

Для безопасности сохраните jarsignerKeystorePassword и jarsignerKeyPassword в секретных переменных и используйте эти переменные в конвейере.

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

Тестирование в эмуляторе Android

Чтобы установить и запустить эмулятор Android, добавьте задачу Bash в конвейер и вставьте следующий код. Эмулятор запускается как фоновый процесс и доступен в последующих задачах. Упорядочение параметров эмулятора в соответствии с средой тестирования.

#!/usr/bin/env bash

# Install AVD files
echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install 'system-images;android-27;google_apis;x86'

# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-27;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 > /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"

Тестирование на размещенных в Azure устройствах

Чтобы протестировать приложение в размещенной лаборатории устройств Android в Центре приложений Visual Studio, добавьте задачу "Тест Центра приложений" в конвейер.

Для этой задачи требуется бесплатная пробная учетная запись Центра приложений, которая должна быть преобразована в платную через 30 дней, чтобы продолжить использовать лабораторию тестирования. Зарегистрируйтесь для учетной записи Центра приложений перед использованием этой задачи.

В следующем примере выполняется набор тестов Центра приложений. Задача использует подключение службы, которое необходимо настроить.

Полный синтаксис задачи и справочные сведения см. в статье "Тестирование Центра приложений". Дополнительные сведения см. в статье Об использовании Azure DevOps для тестирования пользовательского интерфейса.

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

Сохранение артефактов с помощью записи сборки

Чтобы сохранить ФАЙЛ APK с записью сборки или тестом и развернуть его в последующих конвейерах, добавьте задачи copy Files и Publish Build Artifacts в конвейер. Дополнительные сведения см. в статье "Публикация и скачивание артефактов конвейера".

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

Развертывание в Центре приложений

Чтобы распространить приложение в группу тестировщиков или бета-версий пользователей, или повысить уровень приложения в Intune или Google Play, добавьте задачу распространения в Центре приложений. Для задачи требуется бесплатная учетная запись Центра приложений, которая остается бесплатной.

В следующем примере приложение распространяется пользователям. Полный синтаксис задачи и справочник см. в разделе "Распространение в Центре приложений". Дополнительные сведения см. в статье "Развертывание сборок Azure DevOps с помощью Центра приложений".

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

Установка расширения Google Play и развертывание в Google Play

Чтобы автоматизировать взаимодействие с Google Play, установите расширение Google Play и выполните следующие задачи. По умолчанию эти задачи проходят проверку подлинности в Google Play с помощью подключения к службе, которое необходимо настроить.

Выпуск

Чтобы освободить новую версию приложения Android в магазине Google Play, добавьте задачу "Выпуск Google Play" в конвейер.

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

Продвижение

Чтобы повысить уровень обновления приложения Android из одной дорожки в другую, например alphabeta, добавьте задачу Google Play Promote в конвейер.

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

Увеличение развертывания

Чтобы увеличить процент развертывания приложения, которое ранее было выпущено в rollout трек, добавьте задачу "Увеличение развертывания Google Play" в конвейер.

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

Состояние обновления

Чтобы обновить состояние развертывания для приложения, которое ранее было выпущено rollout в трек, добавьте задачу "Обновление состояния Google Play" в конвейер.

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

Создание пакета приложений

Вы можете создавать и подписывать пакет приложений с помощью встроенного скрипта и безопасного файла.

  1. Скачайте хранилище ключей и сохраните его в виде безопасного файла в библиотеке Azure Pipelines.

  2. Создайте переменные для keystore.password, key.aliasа также key.password в группе переменных.

В конвейере YAML:

  1. Добавьте задачу "Скачать безопасный файл", чтобы скачать безопасный файл app.keystore.

    - task: DownloadSecureFile@1
      name: keyStore
      displayName: "Download keystore from secure files"
      inputs:
        secureFile: app.keystore
    
  2. Используйте задачу Bash со скриптом Bash для создания и подписи пакета приложений.

    - 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. Используйте задачу копирования файлов для копирования пакета приложений.

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

Здесь можно создать и сохранить артефакт с помощью задачи "Публикация артефакта сборки" или использовать расширение Google Play для публикации пакета приложений.