Бөлісу құралы:


Создание, тестирование и развертывание приложений для 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@3
  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 в конвейер и вставьте следующий код. Эмулятор запускается как фоновый процесс и доступен в последующих задачах. Упорядочение параметров эмулятора в соответствии с средой тестирования.

Внимание

Если вы используете агент, размещенный корпорацией Майкрософт, используйте образ агента MacOS с эмулятором Android. Для запуска текущих эмуляторов Android требуется аппаратное ускорение. Агенты Ubuntu, размещенные в Azure DevOps, не поддерживают аппаратное ускорение.

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      #!/usr/bin/env bash

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

      # Create emulator
      echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n xamarin_android_emulator -d "Nexus 10" -k 'system-images;android-35;google_apis;x86_64' --force

      echo "y" | $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 on > /dev/null 2>&1 &
      # Fixed quoting around "\r"
      $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 дней, чтобы продолжить использовать лабораторию тестирования. Зарегистрируйтесь для учетной записи Центра приложений перед использованием этой задачи.

Предупреждение

Центр приложений Visual Studio планируется выйти на пенсию 31 марта 2025 г. Дополнительные сведения о временной шкале поддержки и рекомендуемых альтернативах.

сначала зарегистрируйтесь в Центре приложений.

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

Полный синтаксис задачи и справочные сведения см. в статье "Тестирование Центра приложений". Дополнительные сведения см. в статье Об использовании 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 для публикации пакета приложений.