Вы можете интегрировать App Distribution в процесс сборки Android с помощью плагина Gradle App Distribution . Этот плагин позволяет указать тестировщиков и примечания к выпуску в Gradle-файле вашего приложения, что позволяет настраивать дистрибутивы для различных типов сборки и вариантов приложения.
В этом руководстве описывается, как распространять APK-файлы среди тестировщиков с помощью плагина App Distribution Gradle.
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
Если вы не используете другие продукты Firebase, вам достаточно создать проект и зарегистрировать приложение. Однако, если вы решите использовать другие продукты в будущем, обязательно выполните все шаги на странице, ссылка на которую указана выше.
Шаг 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.4" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "5.1.1" 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.4' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.1.1' 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 CLI, если не используется другой метод аутентификации.
Аутентификация с помощью учётной записи сервиса позволяет гибко использовать плагин с вашей системой непрерывной интеграции (CI). Существует два способа предоставить данные учётной записи сервиса:
-  Передайте файл ключа учётной записи службы в build.gradle. Этот метод может оказаться удобным, если файл ключа учётной записи службы уже есть в вашей среде сборки.
-  Настройте переменную окружения GOOGLE_APPLICATION_CREDENTIALSтак, чтобы она указывала на файл ключей вашей учётной записи сервиса. Этот метод может быть предпочтительнее, если у вас уже настроены учётные данные приложения по умолчанию (ADC) для другого сервиса Google (например, Google Cloud ).
Для аутентификации с использованием учетных данных сервисной учетной записи:
- В консоли Google Cloud выберите свой проект и создайте новую учетную запись службы.
- Добавьте роль администратора Firebase App Distribution .
- Создайте закрытый JSON-ключ и переместите его в место, доступное вашей среде сборки. Сохраните этот файл в безопасном месте , так как он предоставляет администратору доступ к App Distribution в вашем проекте Firebase.
- Пропустите этот шаг, если вы создали приложение после 20 сентября 2019 г.: в консоли Google API включите API Firebase App Distribution . При появлении запроса выберите проект с тем же именем, что и у вашего проекта Firebase.
- Укажите или найдите данные своей учетной записи службы: -  Чтобы передать Gradle ключ учетной записи службы, в файле build.gradleзадайте для свойстваserviceCredentialsFileфайл закрытого ключа JSON.
- Чтобы найти свои учётные данные в ADC, укажите путь к JSON-файлу закрытого ключа в переменной среды - GOOGLE_APPLICATION_CREDENTIALS. Например:- 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 = "APK" releaseNotesFile = "/path/to/releasenotes.txt" testers = "ali@example.com, bri@example.com, cal@example.com" } } } // ... }
Groovy
android { // ... buildTypes { release { firebaseAppDistribution { artifactType="APK" 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 assembleRelease appDistributionUploadRelease - Или, если вы прошли аутентификацию с помощью своей учетной записи Google и не указали учетные данные в файле сборки Gradle, включите переменную - FIREBASE_TOKEN:- export FIREBASE_TOKEN=1/a1b2c3d4e5f67890 ./gradlew --stop // Only needed for environment variable changes ./gradlew assembleRelease appDistributionUploadRelease 
- Вы также можете переопределить значения, заданные в файле - build.gradle, передав аргументы командной строки в формате- --<property-name>=<property-value>. Например:- Чтобы загрузить отладочную сборку в App Distribution : - ./gradlew bundleDebug appDistributionUploadDebug --artifactType="APK"
- Чтобы пригласить дополнительных тестировщиков или удалить существующих тестировщиков из вашего проекта 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 , чтобы узнать, как шаг за шагом распространять выпуски пакетов приложений. 
- Изучите передовой опыт распространения приложений Android среди тестировщиков QA с использованием CI/CD .