第4章 构建并上传App Bundle/APK到测试轨道
适用场景
本章适用于以下场景:
- 开发者已完成应用功能开发,准备通过Google Play测试轨道分发给内部测试人员、封闭测试用户或开放测试用户。
- 需要将签名的发布构件(App Bundle 或 APK)上传至 Play Console 并关联到特定测试轨道发布。
- 团队需要统一操作流程,确保构建一致性、签名正确性和上传轨道的可追溯性。
前置条件
- 已注册 Google Play Console 开发者账号,并创建了应用(Application)。
- 已生成或获得应用签名密钥(.jks / .keystore),并妥善保管密码与别名信息。
- 已在 Play Console 中为应用创建至少一个测试轨道(内部测试 / 封闭测试 / 开放测试),并添加了测试人员列表(邮箱或 Google 群组)。
- 本地开发环境满足要求:Android Studio Arctic Fox 或更高版本;或已安装 Android SDK、Gradle 及命令行工具(bundletool、apksigner 等)。
- 已完成应用版本号(versionCode / versionName)的更新,确保高于已上架版本。
操作步骤
流程分为两种常用方式:Android Studio 图形化方式和命令行方式。无论选择哪种,最终产物均为签名后的发布构件。以下步骤以 Android Studio 方式为主,命令行关键命令作为补充参考。
核心流程概览:生成签名发布构件 → 登录 Play Console → 选择应用 → 选择测试轨道 → 上传构件 → 填写版本说明 → 保存并发布。
步骤1:配置签名信息
在项目级 build.gradle(Module 级别)中配置签名配置。推荐使用单独的签名配置文件或环境变量管理密钥密码。
android {
signingConfigs {
release {
storeFile file("release.keystore")
storePassword System.getenv("KEYSTORE_PASSWORD") ?: "请使用环境变量"
keyAlias System.getenv("KEY_ALIAS") ?: "请使用环境变量"
keyPassword System.getenv("KEY_PASSWORD") ?: "请使用环境变量"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
安全警告:切勿将密钥密码硬编码在版本控制中。建议使用 Gradle 属性文件(未跟踪)或 CI/CD 环境变量。
步骤2:生成签名 App Bundle 或 APK
Android Studio 方式:
- 点击菜单栏
Build → Generate Signed Bundle / APK。 - 选择 Android App Bundle(推荐,Google Play 优化分发)或 APK。
- 选择签名配置(或手动输入密钥信息)。
- 选择构建变体为
release。 - 指定输出路径,点击 Finish 等待构建完成。
命令行方式:
# 清理先前构建(可选)
./gradlew clean
# 生成签名 App Bundle
./gradlew bundleRelease
# 生成签名 APK
./gradlew assembleRelease
# 输出位置:app/build/outputs/bundle/release/ 或 app/build/outputs/apk/release/
步骤3:登录 Play Console 并进入应用
- 访问 Play Console,使用开发者账号登录。
- 在左侧导航栏选择目标应用。
步骤4:选择测试轨道
- 在左侧菜单 测试 → 内部测试 / 封闭测试 / 开放测试,选择需要发布的目标轨道。
- 若轨道未创建,点击 创建新轨道 并按照向导完成设置(包括添加测试人员)。
步骤5:上传构件
- 在测试轨道页面,点击 创建新版本。
- 点击 上传 按钮,选择步骤2生成的
.aab或.apk文件。 - 系统验证签名和版本号,若成功则显示构件摘要。
步骤6:填写版本说明并发布
- 输入版本说明(支持多语言,建议至少使用英语和主要目标语言)。
- 检查所有配置(测试人员范围、国家/地区、发布份额等)。
- 点击 保存 后,点击 发布版本 按钮。
- 等待数分钟至数小时,测试人员即可通过加入的测试链接下载安装。
输入输出物
| 输入物 | 输出物 |
|---|---|
| 应用源代码项目 | 签名发布 App Bundle(.aab)或 APK(.apk) |
| 签名密钥文件(.jks / .keystore) | Play Console 测试轨道发布版本记录 |
| Google Play Console 开发者账号及应用 | 测试人员收到的测试邀请(通过邮件或链接) |
| 测试人员名单(邮箱或 Google 群组) | 版本说明(Release Notes) |
责任边界
- 开发者/工程师:负责签名配置安全、构建正确性、版本号管理。
- 测试负责人/PM:负责测试轨道创建、测试人员名单维护、版本说明撰写。
- DevOps/CI 管理员:若使用自动化流水线,负责确保签名密码安全及构建触发条件。
- 合规/法务:确保测试分发不涉及敏感权限或内容违规(特殊场景下介入)。
记录材料
- 构建日志(Gradle 控制台输出或 CI 构建日志)。
- 签名密钥指纹(SHA-1 / SHA-256)与 Play Console 登记的指纹比对记录。
- 版本号记录:versionCode、versionName、构建时间戳。
- Play Console 发布版本截图(或发布操作的时间戳)。
- 测试人员确认收到测试邀请的反馈记录(可选)。
异常处理
| 异常现象 | 可能原因 | 解决措施 |
|---|---|---|
| 构建失败:“Signature failed” | 密钥文件路径错误、密码错误、别名不匹配 | 检查 signingConfig 配置;使用 keytool 验证密钥库 |
| 上传提示“Version code 已存在” | versionCode 未递增 | 在 build.gradle 中增加 versionCode |
| 发布后测试人员无法收到邀请 | 测试轨道未设置用户列表;用户邮箱未验证 | 返回轨道设置添加正确邮箱,确认用户已加入 Google 群组 |
| 上传失败:“App Bundle is not signed” | 构建时未配置 release 签名 | 检查 buildTypes 中 release 的 signingConfig |
| Play Console 提示“应用签名不一致” | 本地上传密钥与 Play 应用签名密钥不匹配(新应用) | 上传原始签名密钥或使用 Play 提供的签名方案 |
验收标准
- 能够从 Play Console 成功下载已发布的测试版本(通过测试链接或直接查看)。
- 测试人员(至少 1 位)成功安装并打开应用,应用签名与内部 debug 构建一致(不提示证书错误)。
- 版本说明在 Play Store 测试页面正确显示。
- 所有配置(国家/地区限制、测试人员范围)按预期生效。
- 如有 CI/CD 集成,构建日志中无签名类错误,且自动上传后轨道状态更新为“已发布”。