Вы можете интегрировать App Distribution в процесс сборки Android-приложений с помощью плагина App Distribution Gradle. Плагин позволяет указывать тестировщиков и примечания к релизу в файле Gradle вашего приложения, что позволяет настраивать дистрибуцию для различных типов сборок и вариантов вашего приложения.
В этом руководстве описано, как распространять APK-файлы среди тестировщиков с помощью плагина Gradle App Distribution .
Прежде чем начать
Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
Если вы не используете другие продукты Firebase, вам нужно всего лишь создать проект и зарегистрировать приложение. Однако, если вы решите использовать дополнительные продукты в будущем, обязательно выполните все шаги, описанные на странице, ссылка на которую приведена выше.
Шаг 1. Настройте свой проект Android.
В корневом (проектном) файле Gradle (
<project>/build.gradle.ktsили<project>/build.gradle) добавьте плагин App Distribution Gradle в качестве зависимости: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.2.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.4' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.2.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 CLI, если не используется другой метод аутентификации.
Аутентификация с помощью сервисной учетной записи позволяет гибко использовать плагин с вашей системой непрерывной интеграции (CI). Существует два способа предоставления учетных данных сервисной учетной записи:
- Передайте файл ключа вашей учетной записи службы в файл
build.gradle. Этот метод может оказаться удобным, если файл ключа вашей учетной записи службы уже находится в вашей среде сборки. - Установите переменную среды
GOOGLE_APPLICATION_CREDENTIALSтак, чтобы она указывала на файл ключа вашей учетной записи службы. Этот метод может быть предпочтительнее, если у вас уже настроены учетные данные приложения по умолчанию (ADC) для другой службы Google (например, Google Cloud ).
Для аутентификации с использованием учетных данных сервисной учетной записи:
- В консоли Google Cloud выберите свой проект и создайте новую учетную запись службы.
- Добавьте роль администратора Firebase App Distribution .
- Создайте закрытый JSON-ключ и переместите его в место, доступное для вашей среды сборки. Обязательно храните этот файл в безопасном месте , так как он предоставляет администраторский доступ к App Distribution в вашем проекте Firebase.
- Пропустите этот шаг, если вы создали приложение после 20 сентября 2019 года: В консоли Google API включите Firebase App Distribution API. При появлении запроса выберите проект с тем же именем, что и ваш проект 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 = "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 (App ID). Требуется только в том случае, если у вас не установлен плагин Google Services Gradle. Вы можете найти App ID в файле 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-приложений среди тестировщиков с использованием CI/CD .