Создание, тестирование и развертывание приложений для Android
Azure DevOps Services
В этом кратком руководстве показано, как настроить конвейер YAML в Azure Pipelines для автоматического создания, тестирования и развертывания приложения Android.
Необходимые компоненты
Организация и проект Azure DevOps, где у вас есть разрешение на создание конвейеров и развертывание приложений. Сведения о создании проекта см. в статье "Создание проекта в Azure DevOps".
Учетная запись GitHub.
Внимание
Во время процедур GitHub может потребоваться создать подключение службы GitHub или перенаправить на GitHub для входа, установки Azure Pipelines, авторизации Azure Pipelines или проверки подлинности в организациях GitHub. Следуйте инструкциям на экране, чтобы завершить процесс. Дополнительные сведения см. в разделе Access к репозиториям GitHub.
Создание и запуск конвейера
Выполните следующие задачи, чтобы настроить конвейер для простого приложения Android.
- Чтобы получить код для примера приложения, введите пример репозитория приложений Android в учетную запись GitHub.
- В проекте Azure DevOps выберите конвейер Pipelines>New или Create pipeline, если этот конвейер является первым в проекте.
- Выберите GitHub в качестве расположения исходного кода.
- На экране "Выбор репозитория" выберите вилку репозитория Android.
- На экране "Настройка конвейера" выберите Android.
- Azure Pipelines предоставляет начальный конвейер на основе шаблона Android . Просмотрите код конвейера.
- Выберите Сохранить и выполнить.
- При необходимости измените сообщение "Фиксация" и укажите описание. Затем нажмите кнопку "Сохранить и снова запустить ", чтобы зафиксировать файл 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 в конвейер и вставьте следующий код. Эмулятор запускается как фоновый процесс и доступен в последующих задачах. Упорядочение параметров эмулятора в соответствии с средой тестирования.
#!/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"
Тестирование на размещенных в 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 из одной дорожки в другую, например alpha
→ beta
, добавьте задачу 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
Создание пакета приложений
Вы можете создавать и подписывать пакет приложений с помощью встроенного скрипта и безопасного файла.
Скачайте хранилище ключей и сохраните его в виде безопасного файла в библиотеке Azure Pipelines.
Создайте переменные для
keystore.password
,key.alias
а такжеkey.password
в группе переменных.
В конвейере YAML:
Добавьте задачу "Скачать безопасный файл", чтобы скачать безопасный файл app.keystore.
- task: DownloadSecureFile@1 name: keyStore displayName: "Download keystore from secure files" inputs: secureFile: app.keystore
Используйте задачу 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)
Используйте задачу копирования файлов для копирования пакета приложений.
- task: CopyFiles@2 displayName: 'Copy deliverables' inputs: SourceFolder: '$(Build.SourcesDirectory)/myAndroidApp/bin/$(buildConfiguration)' Contents: '*.aab' TargetFolder: 'drop'
Здесь можно создать и сохранить артефакт с помощью задачи "Публикация артефакта сборки" или использовать расширение Google Play для публикации пакета приложений.
Связанные расширения
- Кодифицированная безопасность от кодифицированной безопасности
- Google Play от Майкрософт
- Задачи мобильного приложения для iOS и Android из Джеймса Монтемагно
- Лаборатории мобильного тестирования из Perfecto Mobile
- React Native от Майкрософт