您可以使用 App Distribution Gradle 插件将 App Distribution 集成到您的 Android 构建过程中。该插件允许您在应用程序的build.gradle
文件中指定测试人员和发行说明,让您为应用程序的不同构建类型和变体配置分发。
本指南介绍了如何使用 App Distribution Gradle 插件将 APK 分发给测试人员。
在你开始之前
如果您还没有,请将 Firebase 添加到您的 Android 项目中。
如果您不使用任何其他 Firebase 产品,则只需创建一个项目并注册您的应用程序。但是,如果您决定将来使用其他产品,请务必完成上面链接页面上的所有步骤。
步骤 1. 设置您的 Android 项目
在您的根级别(项目级别) Gradle 文件(
或<project>/build.gradle
)中,将 App Distribution Gradle 插件添加为 buildscript 依赖项:<project>/build.gradle.kts 时髦的
buildscript { repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } dependencies { ... classpath 'com.android.tools.build:gradle:7.2.0' // Make sure that you have the Google services Gradle plugin dependency classpath 'com.google.gms:google-services:4.3.15' // Add the dependency for the App Distribution Gradle plugin classpath 'com.google.firebase:firebase-appdistribution-gradle:3.2.0' } }
科特林
buildscript { repositories { // Make sure that you have the following two repositories google() // Google's Maven repository mavenCentral() // Maven Central repository } dependencies { ... classpath("com.android.tools.build:gradle:7.2.0") // Make sure that you have the Google services Gradle plugin dependency classpath("com.google.gms:google-services:4.3.15") // Add the dependency for the App Distribution Gradle plugin classpath("com.google.firebase:firebase-appdistribution-gradle:3.2.0") } }
在您的模块(应用程序级) Gradle 文件(通常是
或<project>/<app-module>/build.gradle
中,添加 App Distribution Gradle 插件:<project>/<app-module>/build.gradle.kts 时髦的
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' }
科特林
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
设置为指向您的服务帐户密钥文件。如果您已经为其他 Google 服务(例如 Google Cloud)配置了应用程序默认凭据 (ADC),则您可能更喜欢此方法。
要使用服务帐户凭据进行身份验证:
- 在Google Cloud Console 上,选择您的项目并创建一个新的服务帐户。
- 添加Firebase App Distribution Admin角色。
- 创建一个 json 私钥并将该密钥移动到您的构建环境可以访问的位置。请务必将此文件保存在安全的地方,因为它会授予管理员访问您 Firebase 项目中 App Distribution 的权限。
- 如果您的应用是在 2019 年 9 月 20 日之后创建的,请跳过此步骤:在 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 文件(通常是
或
中,通过至少添加配置 App Distribution一个firebaseAppDistribution
部分。
例如,要将release
版本分发给测试人员,请遵循以下说明:
时髦的
android { // ... buildTypes { release { firebaseAppDistribution { artifactType="APK" releaseNotesFile="/path/to/releasenotes.txt" testers="ali@example.com, bri@example.com, cal@example.com" } } } // ... }
科特林
import com.google.firebase.appdistribution.gradle.firebaseAppDistribution 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
版本,请遵循以下说明:
时髦的
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" } } } // ... }
科特林
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" } } } // ... }
使用以下参数配置分发:
应用分发构建参数 | |
---|---|
appId | 您应用的 Firebase 应用 ID。仅当您没有安装 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" |
stacktrace | 打印出用户异常的堆栈跟踪。这在调试问题时很有用。 |
第 4 步。将您的应用程序分发给测试人员
最后,要打包您的测试应用程序并邀请测试人员,请使用项目的 Gradle 包装器构建目标
BUILD-VARIANT
和appDistributionUpload BUILD-VARIANT
,其中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
您还可以通过以
--<property-name>=<property-value>
的形式传递命令行参数来覆盖build.gradle
文件中设置的值。例如:要将调试版本上传到 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 文件)的签名链接。该链接将在一小时后过期。
分发构建后,它会在 Firebase 控制台的 App Distribution 仪表板中可用 150 天(五个月)。当构建距离到期还有 30 天时,控制台和测试人员在其测试设备上的构建列表中都会显示到期通知。
未受邀测试应用程序的测试人员会收到开始测试的电子邮件邀请,而现有测试人员会收到新版本已准备好进行测试的电子邮件通知(阅读测试人员设置指南,了解有关如何安装测试应用程序的说明)。您可以在 Firebase 控制台中监控每个测试人员的状态——他们是否接受了邀请以及是否下载了应用程序。
测试人员有 30 天的时间接受邀请,在邀请到期前测试该应用。当邀请还有 5 天到期时,Firebase 控制台中发布的测试人员旁边会显示到期通知。可以通过使用测试人员行上的下拉菜单重新发送邀请来续订邀请。
下一步
访问Android App Bundle 代码实验室,了解如何逐步分发 App Bundle 版本。
了解使用 CI/CD 将 Android 应用分发给 QA 测试人员的最佳实践。