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 打包与上架流程

  1. 打包 AAB:Project Settings 选 Android (ASTC),Packaging 格式选 .aab(UE 打 Android 包的指南 https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/packaging-android-projects-in-ce41 有完整步骤)。
  2. 本地验证:用 bundletool 装 AAB 到真机测一下(不然上架后才发现某架构崩)。
  3. 上传 Play Console:内部测试轨道 → 封闭测试 → 开放。先内部测试过一遍,别直接推生产。
  4. 商店资料:截图、简介、分级问卷(含暴力/成人内容自评)、隐私政策 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 托管签名、每次上传先走内测轨道。签名问题的解药不是技术,是纪律。