Вы можете интегрировать App Distribution в процесс сборки Android с помощью плагина App Distribution Gradle. Плагин позволяет вам указывать тестировщиков и примечания к выпуску в файле Gradle вашего приложения, позволяя настраивать дистрибутивы для разных типов сборок и вариантов вашего приложения.
В этом руководстве описывается, как распространять пакеты приложений Android (AAB) среди тестировщиков с помощью плагина Gradle App Distribution .
App Distribution интегрируется с внутренней службой обмена приложениями Google Play для обработки загружаемых вами AAB-файлов и предоставления APK-файлов, оптимизированных для конфигураций устройств ваших тестировщиков. Распространение AAB позволяет вам делать следующее:
Запускайте оптимизированные APK-файлы (предоставляемые Google Play), оптимизированные для устройств ваших тестировщиков.
Выявляйте и устраняйте проблемы, связанные с конкретным устройством.
Протестируйте функции пакета приложений, такие как доставка функций Play и доставка ресурсов Play .
Уменьшите размер загрузок для ваших тестировщиков.
Требуемые разрешения
Чтобы загрузить AAB в App Distribution , вам необходимо связать свое приложение Firebase с приложением в Google Play . Для выполнения этих действий у вас должен быть необходимый уровень доступа.
Если у вас нет необходимого доступа к Firebase, вы можете попросить владельца проекта Firebase назначить вам соответствующую роль через настройки IAM консоли Firebase . Если у вас есть вопросы о доступе к вашему проекту Firebase, включая поиск или назначение владельца, ознакомьтесь с часто задаваемыми вопросами «Разрешения и доступ к проектам Firebase» .
Следующая таблица применима к связыванию приложения Firebase с приложением в Google Play , а также к загрузке AAB.
Действие в консоли Firebase | Требуется разрешение IAM | Роли IAM, которые по умолчанию включают необходимые разрешения. | Дополнительные необходимые роли |
---|---|---|---|
Свяжите приложение Firebase с приложением в Google Play | firebase.playLinks.update | Одна из следующих ролей: | Доступ к учетной записи разработчика Google Play от имени администратора. |
Загрузите AAB в App Distribution | firebaseappdistro.releases.update | Одна из следующих ролей: | –– |
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой проект Android . В конце этого рабочего процесса в вашем проекте Firebase появится приложение Firebase Android.
Если вы не используете другие продукты Firebase, вам нужно всего лишь создать проект и зарегистрировать свое приложение. Если вы решите использовать дополнительные продукты, обязательно выполните все шаги, описанные в разделе «Добавление Firebase в ваш проект Android» .
Чтобы создать ссылку Firebase на Google Play и загрузить файлы AAB, убедитесь, что ваше приложение соответствует следующим требованиям:
Приложение в Google Play и приложение Firebase для Android зарегистрированы с использованием одного и того же имени пакета.
Приложение в Google Play настраивается на панели приложения и распространяется на один из треков Google Play (Внутреннее тестирование, Закрытое тестирование, Открытое тестирование или Производство).
Проверка приложения в Google Play завершена и приложение опубликовано. Ваше приложение опубликовано, если в столбце Статус приложения отображается один из следующих статусов: Внутреннее тестирование (не черновое внутреннее тестирование), Закрытое тестирование, Открытое тестирование или Производство.
Свяжите свое Android-приложение Firebase со своей учетной записью разработчика Google Play:
В консоли Firebase перейдите в свой
На карточке Google Play нажмите «Ссылка» .
Если у вас уже есть ссылки на Google Play, вместо этого нажмите «Управление» .Следуйте инструкциям на экране, чтобы включить интеграцию App Distribution и выбрать, какие приложения Firebase для Android связать с Google Play.
Узнайте больше о привязке к Google Play .
Шаг 1. Настройте свой Android-проект
В файле Gradle корневого уровня (уровня проекта) (
<project>/build.gradle.kts
или<project>/build.gradle
) добавьте плагин Gradle App Distribution в качестве зависимости:Kotlin
plugins { // ... id("com.android.application") version "7.3.0" apply false // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "5.0.0" apply false }
Groovy
plugins { // ... id 'com.android.application' version '7.3.0' apply false // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.0.0' apply false }
В файле Gradle вашего модуля (на уровне приложения) (обычно
<project>/<app-module>/build.gradle.kts
или<project>/<app-module>/build.gradle
) добавьте плагин Gradle App Distribution :Kotlin
plugins { id("com.android.application") // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the App Distribution Gradle plugin id("com.google.firebase.appdistribution") }
Groovy
plugins { id 'com.android.application' // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' }
Если вы находитесь за корпоративным прокси-сервером или брандмауэром, добавьте следующее системное свойство Java , которое позволит App Distribution загружать ваши дистрибутивы в Firebase:
-Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password
Шаг 2. Аутентификация с помощью Firebase
Прежде чем вы сможете использовать плагин Gradle, вы должны сначала пройти аутентификацию в своем проекте Firebase одним из следующих способов. По умолчанию плагин Gradle ищет учетные данные из интерфейса командной строки Firebase , если другой метод аутентификации не используется.
Аутентификация с помощью учетной записи службы позволяет вам гибко использовать плагин с вашей системой непрерывной интеграции (CI). Существует два способа предоставления учетных данных учетной записи службы:
- Передайте файл ключей вашей сервисной учетной записи в
build.gradle
. Этот метод может оказаться удобным, если у вас уже есть файл ключей сервисной учетной записи в среде сборки. - Установите переменную среды
GOOGLE_APPLICATION_CREDENTIALS
, чтобы она указывала на файл ключей вашего сервисного аккаунта. Вы можете предпочесть этот метод, если у вас уже есть учетные данные приложения по умолчанию (ADC), настроенные для другой службы Google (например, Google Cloud ).
Для аутентификации с использованием учетных данных сервисной учетной записи:
- В консоли Google Cloud выберите свой проект и создайте новую учетную запись службы.
- Добавьте роль администратора Firebase App Distribution .
- Создайте закрытый ключ json и переместите его в место, доступное для вашей среды сборки. Обязательно сохраните этот файл в безопасном месте , поскольку он предоставляет администратору доступ к App Distribution в вашем проекте Firebase.
- Пропустите этот шаг, если вы создали свое приложение после 20 сентября 2019 г.: в консоли API Google включите API Firebase App Distribution . При появлении запроса выберите проект с тем же именем, что и ваш проект Firebase.
Предоставьте или найдите учетные данные своей сервисной учетной записи:
- Чтобы передать Gradle ключ вашей учетной записи службы, в файле
build.gradle
установите для свойстваserviceCredentialsFile
файл JSON закрытого ключа. Чтобы найти свои учетные данные с помощью ADC, установите для переменной среды
GOOGLE_APPLICATION_CREDENTIALS
путь к JSON-файлу закрытого ключа. Например:export GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/credentials/file.json
Дополнительные сведения об аутентификации с помощью ADC см. в статье Предоставление учетных данных вашему приложению.
- Чтобы передать Gradle ключ вашей учетной записи службы, в файле
Инструкции по аутентификации вашего проекта см. в разделе «Вход с помощью Firebase CLI» .
Шаг 3. Настройте свойства распространения
В файле Gradle вашего модуля (на уровне приложения) (обычно <project>/<app-module>/build.gradle.kts
или <project>/<app-module>/build.gradle
) настройте App Distribution , добавив по крайней мере один раздел firebaseAppDistribution
.
Например, чтобы распространить сборку release
среди тестировщиков, следуйте этим инструкциям:
Kotlin
import com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("release") { firebaseAppDistribution { artifactType = "AAB" releaseNotesFile = "/path/to/releasenotes.txt" testers = "ali@example.com, bri@example.com, cal@example.com" } } } // ... }
Groovy
android { // ... buildTypes { release { firebaseAppDistribution { artifactType="AAB" releaseNotesFile="/path/to/releasenotes.txt" testers="ali@example.com, bri@example.com, cal@example.com" } } } // ... }
Вы можете настроить App Distribution для типов сборок и разновидностей продуктов .
Например, чтобы распространять debug
и release
сборки в «демо» и «полной» версиях продукта, следуйте этим инструкциям:
Kotlin
import com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("debug") {...} getByName("release") {...} } flavorDimensions += "version" productFlavors { create("demo") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for demo version" testers = "demo@testers.com" } } create("full") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for full version" testers = "full@testers.com" } } } // ... }
Groovy
android { // ... buildTypes { debug {...} release {...} } flavorDimensions "version" productFlavors { demo { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for demo version" testers="demo@testers.com" } } full { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for full version" testers="full@testers.com" } } } // ... }
Для настройки раздачи используйте следующие параметры:
Параметры сборки App Distribution | |
---|---|
appId | Идентификатор приложения Firebase вашего приложения. Требуется только в том случае, если у вас не установлен плагин Google Services Gradle. Идентификатор приложения можно найти в файле appId="1:1234567890:android:321abc456def7890" |
serviceCredentialsFile | Путь к JSON-файлу закрытого ключа вашего сервисного аккаунта. Требуется только в том случае, если вы используете аутентификацию учетной записи службы. |
artifactType | Указывает тип файла вашего приложения. Можно установить |
artifactPath | Абсолютный путь к файлу APK или AAB, который вы хотите загрузить. |
releaseNotes или releaseNotesFile | Примечания к выпуску для этой сборки. Вы можете либо указать примечания к выпуску напрямую, либо путь к обычному текстовому файлу. |
testers или testersFile | Адреса электронной почты тестировщиков, которым вы хотите распространять сборки. Вы можете указать тестировщиков в виде списка адресов электронной почты, разделенных запятыми: testers="ali@example.com, bri@example.com, cal@example.com" Или вы можете указать путь к файлу, содержащему список адресов электронной почты, разделенных запятыми: testersFile="/path/to/testers.txt" |
groups или groupsFile | Группы тестировщиков, которым вы хотите распространять сборки (см. Управление тестировщиками ). Группы указываются с помощью Вы можете указать группы в виде списка псевдонимов групп, разделенных запятыми: groups="qa-team, android-testers" Или вы можете указать путь к файлу, содержащему список псевдонимов групп, разделенных запятыми: groupsFile="/path/to/tester-groups.txt" |
testDevices или testDevicesFile | Следующие типы распространения являются частью бета-функции автоматического тестировщика . Тестовые устройства, на которые вы хотите распространять сборки (см. Автоматические тесты ). Вы можете указать тестовые устройства в виде списка спецификаций устройств, разделенных точкой с запятой: testDevices="model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait" Или вы можете указать путь к файлу, содержащему список спецификаций устройств, разделенных точкой с запятой: testDevicesFile="/path/to/testDevices.txt" |
testUsername | Имя пользователя для автоматического входа в систему, которое будет использоваться во время автоматических тестов . |
testPassword или testPasswordFile | Пароль для автоматического входа в систему, который будет использоваться во время автоматических тестов . Или вы можете указать путь к текстовому файлу, содержащему пароль: testPasswordFile="/path/to/testPassword.txt" |
testUsernameResource | Имя ресурса для поля имени пользователя для автоматического входа в систему, которое будет использоваться во время автоматических тестов . |
testPasswordResource | Имя ресурса для поля пароля для автоматического входа в систему, которое будет использоваться во время автоматических тестов . |
testNonBlocking | Запускайте автоматические тесты асинхронно. Посетите консоль Firebase, чтобы увидеть результаты автоматического тестирования. |
stacktrace | Распечатывает трассировку стека для пользовательских исключений. Это полезно при отладке проблем. |
Шаг 4. Распространите свое приложение среди тестировщиков
Наконец, чтобы упаковать тестовое приложение и пригласить тестировщиков, создайте цели
BUILD-VARIANT
иappDistributionUpload BUILD-VARIANT
с оболочкой Gradle вашего проекта, где BUILD-VARIANT — это необязательный вариант продукта и тип сборки, которые вы настроили на предыдущем шаге. Дополнительные сведения о вариантах продукта см. в разделе Настройка вариантов сборки .Например, чтобы распространить приложение с использованием варианта сборки
release
, выполните следующую команду:./gradlew bundleRelease appDistributionUploadRelease
Или, если вы прошли аутентификацию с помощью своей учетной записи Google и не предоставили учетные данные в файле сборки Gradle, включите переменную
FIREBASE_TOKEN
:export FIREBASE_TOKEN=1/a1b2c3d4e5f67890 ./gradlew --stop // Only needed for environment variable changes ./gradlew bundleRelease appDistributionUploadRelease
Вы также можете переопределить значения, установленные в файле
build.gradle
, передав аргументы командной строки в форме--<property-name>=<property-value>
. Например:Чтобы загрузить отладочную сборку в App Distribution :
./gradlew bundleDebug appDistributionUploadDebug --artifactType="AAB"
Чтобы пригласить дополнительных тестировщиков или удалить существующих тестировщиков из вашего проекта Firebase:
./gradlew appDistributionAddTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"
./gradlew appDistributionRemoveTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"
После добавления тестера в ваш проект Firebase вы можете добавить его в отдельные выпуски. Удаленные тестировщики больше не будут иметь доступа к релизам вашего проекта, но могут сохранить доступ к вашим релизам в течение определенного периода времени.
Вы также можете указать тестировщиков, используя
--file="/path/to/testers.txt"
вместо--emails
.Задачи
appDistributionAddTesters
иappDistributionRemoveTesters
также принимают следующие аргументы:projectNumber
: номер вашего проекта Firebase.serviceCredentialsFile
: путь к файлу учетных данных службы Google. Это тот же аргумент, который используется в действии загрузки.
Плагин Gradle выводит следующие ссылки после загрузки релиза. Эти ссылки помогут вам управлять двоичными файлами и гарантировать, что у тестировщиков и других разработчиков есть правильный выпуск:
-
firebase_console_uri
— ссылка на консоль Firebase , отображающая один выпуск. Вы можете поделиться этой ссылкой с другими разработчиками в вашей организации. -
testing_uri
— ссылка на выпуск в интерфейсе тестировщика (родное приложение Android), которая позволяет тестировщикам просматривать примечания к выпуску и устанавливать приложение на свое устройство. Чтобы использовать ссылку, тестировщику необходим доступ к выпуску. -
binary_download_uri
— подписанная ссылка, по которой непосредственно загружается и устанавливается двоичный файл приложения (файл APK или AAB). Срок действия ссылки истекает через час.
Как только вы распространите свою сборку, она станет доступна на панели App Distribution консоли Firebase на 150 дней (пять месяцев). Когда до истечения срока действия сборки остается 30 дней, уведомление об истечении срока действия появляется как в консоли, так и в списке сборок вашего тестировщика на его тестовом устройстве.
Тестировщики, которых не пригласили протестировать приложение, получают приглашения по электронной почте начать работу, а существующие тестировщики получают уведомления по электронной почте о том, что новая сборка готова к тестированию (инструкции по установке тестового приложения см. в руководстве по настройке тестировщика ). Вы можете отслеживать статус каждого тестировщика — приняли ли они приглашение и загрузили ли приложение — в консоли Firebase .
У тестировщиков есть 30 дней, чтобы принять приглашение протестировать приложение до истечения срока его действия. Когда до истечения срока действия приглашения остается 5 дней, в консоли Firebase рядом с тестером в выпуске появляется уведомление об истечении срока действия. Приглашение можно продлить, отправив его повторно с помощью раскрывающегося меню в строке тестера.
Следующие шаги
Внедрите обратную связь в приложении , чтобы тестировщикам было проще отправлять отзывы о вашем приложении (включая снимки экрана).
Узнайте, как отображать оповещения внутри приложения для тестировщиков, когда новые сборки вашего приложения доступны для установки.
Посетите лабораторию разработки Android App Bundle , чтобы узнать, как шаг за шагом распространять выпуски App Bundle.
Изучите лучшие практики по распространению приложений Android среди тестировщиков QA с помощью CI/CD .