1. 为什么2024年必须迁移到AAB格式如果你还在用APK格式上架Google Play现在就是时候考虑迁移了。从2021年8月开始Google就强制要求新应用必须使用AABAndroid App Bundle格式提交。虽然老应用暂时还能用APK更新但根据Google近期的政策动向全面转向AAB只是时间问题。AAB和APK最大的区别在于分发机制。传统APK是把整个应用打包上传用户下载的也是完整安装包。而AAB是按需分发——Google Play会根据用户设备配置CPU架构、语言、分辨率等动态生成最优化的APK。实测下来AAB能让应用体积平均减少15%这对海外用户流量敏感的场景特别重要。迁移过程中最关键的三个变化双密钥体系APK时代只需要一个签名密钥AAB需要上传密钥用于验证开发者身份和应用签名密钥用于实际分发签名两个密钥构建方式Android Studio的Generate Signed Bundle/APK选项现在要选Android App Bundle测试流程本地测试需要用bundletool生成APKS再安装不能直接安装AAB文件2. 密钥管理从单密钥到双密钥的平滑过渡2.1 密钥生成最佳实践在Android Studio中生成密钥时建议直接使用命令行keytool而不是GUI工具这样更容易记录关键参数。以下是生成上传密钥的示例keytool -genkey -v -keystore upload_keystore.jks -keyalg RSA -keysize 2048 -validity 9125 -alias upload_key -storepass 你的密码 -keypass 你的密码几个容易踩坑的参数有效期建议设置25年9125天避免频繁更换密钥库格式必须用.jks或.keystore不能是.pk12加密算法RSA 2048是当前Google推荐的最低标准生成应用签名密钥时记得勾选Export encrypted key for enrolling published apps in Google Play App Signing选项。这个选项会生成一个.pepk文件是后续上传到Google Play Console的必需文件。2.2 密钥安全存储方案我见过太多开发者把密钥密码写在项目README里的惨案。推荐三种更安全的做法本地加密存储用gpg加密密钥文件密码记在1Password等密码管理器CI/CD集成在GitHub Actions或Jenkins中通过环境变量注入密码硬件安全模块大型团队可以考虑YubiKey等硬件密钥存储注意千万不要把.jks或.keystore文件提交到Git仓库建议在.gitignore中添加*.jks *.keystore *.pepk3. 三种迁移场景的实战指南3.1 全新应用上架AAB这是最简单的情况流程如下在Google Play Console创建新应用进入应用完整性→应用签名页面上传.pepk格式的应用签名密钥通过keytool生成PEM格式的上传证书keytool -export -rfc -keystore upload_keystore.jks -alias upload_key -file upload_certificate.pem在Android Studio生成签名的AAB包时确保使用上传密钥签名3.2 已上架AAB应用更新密钥如果需要更换密钥要注意Google的限制应用签名密钥每年只能修改1次上传密钥修改需要联系Google支持团队更新应用签名密钥的关键命令java -jar pepk.jar --keystorenew_signing_key.keystore --aliasyour_alias --outputnew_key.pepk --signing-keystoreupload_keystore.jks --signing-key-aliasupload_key --encryptionkeyGoogle提供的加密公钥3.3 从APK迁移到AAB最复杂情况这是最多开发者踩坑的场景核心难点在于要保持签名一致性。具体步骤提取原APK签名信息keytool -printcert -jarfile old_app.apk记录下MD5/SHA1指纹后续需要验证用原APK密钥生成过渡文件java -jar pepk.jar --keystoreold_keystore.jks --aliasold_alias --outputlegacy_key.pepk --encryptionkeyGoogle提供的加密公钥生成新的上传密钥并关联到原应用测试阶段务必用bundletool安装到多台设备验证bundletool build-apks --bundleapp.aab --outputapp.apks --ksupload_keystore.jks --ks-key-aliasupload_key bundletool install-apks --apksapp.apks4. 构建优化与常见问题排查4.1 Android Studio配置技巧在模块级build.gradle中建议添加这些配置android { bundle { language { enableSplit true // 按语言分包 } density { enableSplit true // 按屏幕密度分包 } abi { enableSplit true // 按CPU架构分包 } } }如果遇到Failed to read key from keystore错误通常是以下原因密钥别名或密码错误JDK版本不兼容建议用JDK 11密钥文件损坏4.2 版本发布检查清单上传AAB前务必检查[ ] minSdkVersion不低于21[ ] 版本代码(versionCode)已递增[ ] 所有动态功能模块都正确声明[ ] 测试过所有设备类型的APK组合发布后记得在Play Console的设备目录页面检查支持的设备数量是否异常减少这可能是分包配置有问题。5. 进阶技巧与自动化方案对于需要频繁发布的团队建议配置Gradle自动化脚本。这段脚本可以自动读取密钥信息并生成AABandroid { signingConfigs { release { storeFile file(System.getenv(KEYSTORE_PATH) ?: default.jks) storePassword System.getenv(KEYSTORE_PASSWORD) keyAlias System.getenv(KEY_ALIAS) keyPassword System.getenv(KEY_PASSWORD) } } buildTypes { release { signingConfig signingConfigs.release } } }搭配CI/CD使用时可以把密钥信息保存在GitHub Secrets或Jenkins Credentials中。我团队的实际案例显示自动化配置后发布效率提升了70%人为失误降为零。迁移过程中如果遇到Google审核被拒最常见的两个原因是签名证书指纹与之前版本不一致使用了不安全的加密算法如SHA1这时候需要检查密钥生成时的参数必要时用keytool -v -list -keystore your.keystore验证指纹信息。