4.2 Android 签名与 AAB 上架:把好验收第一关
核心结论
Google Play 强制 AAB(Android App Bundle)格式,AAB 上传时不带签名,商店帮你签名(Play Signing)。但上传 AAB 本身要签名(上传密钥),且本地调试包也要调试签名。理清"哪些签名给谁用",上架就不再玄学。官方签名指南(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/signing-android-projects-for-r-10dd)与发布指南(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/packaging-and-publishing-andro-f5b7)是这一篇的依据。
三把"钥匙"的关系
| 密钥 | 用途 | 谁保管 | 能换吗 |
|---|---|---|---|
| 调试密钥(Debug Keystore) | 本地直接安装调试包 | 开发者 | 随意 |
| 上传密钥(Upload Key) | 给 AAB 签名上传 | 开发者 | 可重置 |
| 应用签名密钥(App Signing Key) | 最终安装到玩家手机上的包签名 | Google 托管(推荐) | 申请转移 |
核心认知:启用 Play App Signing 后,最关键的安装签名由 Google 托管,开发者只需保管上传密钥。这大大降低了"密钥丢失 = 游戏报废"的风险。
生成上传密钥(Java keytool)
keytool -genkey -v -keystore upload.jks -keyalg RSA -keysize 2048
-validity 10000 -alias upload
注意:validity 给足(常见 25 年+);密码与别名写进密码管理器,丢了得走重置流程(很繁琐)。
UE 里的签名配置
Project Settings -> Android APK Packaging(或 Advanced):
| 字段 | 填什么 |
|---|---|
| Keystore file | upload.jks(提交到版本库要慎重,建议放安全的位置不入库) |
| Keystore password | keystore 密码 |
| Key alias | 别名 |
| Key password | key 密码 |
工程实践:把 .jks 与密码放 CI 的安全变量里,UE 项目里只留占位,CI 打包时注入。避免源码库里泄露签名。
AAB 打包与上架流程
- 打包 AAB:Project Settings 选
Android (ASTC),Packaging 格式选.aab(UE 打 Android 包的指南 https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/packaging-android-projects-in-ce41 有完整步骤)。 - 本地验证:用
bundletool装 AAB 到真机测一下(不然上架后才发现某架构崩)。 - 上传 Play Console:内部测试轨道 → 封闭测试 → 开放。先内部测试过一遍,别直接推生产。
- 商店资料:截图、简介、分级问卷(含暴力/成人内容自评)、隐私政策 URL(必须)。
常见坑与解法
坑 1:上传被拒"包未签名"
原因:AAB 未用上传密钥签名,或签名算法版本过旧。
解法:用 v2/v3 签名方案(UE 一般默认开了),keytool 生成时 keyalg RSA。
坑 2:版本号问题导致上传失败
原因:Version Code 必须每次递增(整数),Version Name 给人看。
解法:CI 里用构建号自动递增 Version Code;Version Name 用语义化版本。
坑 3:玩家手机验证失败(装不上)
原因:上传密钥换了/重置过,与 Google 托管的签名记录冲突。
解法:不要换上传密钥除非走官方重置流程;重置期间会有新旧包共存窗口,安排好灰度。
坑 4:AAB 装到老机黑屏(ASTC 不支持)
解法:Play 会分发对应架构的 APK;但 ASTC 支持要确认目标 API 级别覆盖。上架资料里写明最低系统版本(见 0304 的 ASTC 兼容说明)。
相关节点速查
- 签名官方指南:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/signing-android-projects-for-r-10dd
- 发布与 Play Console 流程:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/packaging-and-publishing-andro-f5b7
- AAB 本地安装验证:
bundletool build-apks --connected-device
心得:签名是"看起来烦、出事致命"的环节。我们项目做了三件事后再没出过事:密钥只放 CI、启用 Play 托管签名、每次上传先走内测轨道。签名问题的解药不是技术,是纪律。
