如何使用现有*.keystore构建Target API 30应用或迁移适配Play商店密钥
Android Target API 30 签名报错解决方案
问题根源
你当前使用的是2048位DSA算法的签名密钥,适配Target API 30时对应的Android Gradle插件默认不再支持SHA-1作为DSA密钥的摘要算法,因此会触发签名构建失败、SHA-1强度不足的报错。自行生成新密钥直接上传会触发Play商店签名校验不通过,是因为Play默认要求同个应用的升级包必须和历史包使用相同的签名密钥。
方案1:使用原有密钥完成无错误构建
无需更换密钥,仅需修改app模块下的build.gradle签名配置,指定v1签名使用的摘要算法即可:
android { signingConfigs { release { // 原有签名配置保持不变(storeFile、storePassword、keyAlias、keyPassword等) v1SigningEnabled true v2SigningEnabled true // 新增以下配置指定签名算法 v1SigningConfig { signatureAlgorithm = "SHA256withDSA" } } } // 其余配置无需改动 }
修改完成后重新构建即可正常生成AAB/APK包,上传到Play商店不会触发签名错误。
方案2:迁移新签名密钥并被Play商店认可
如果需要更换为兼容性更强的RSA算法密钥,需走Play官方的签名密钥升级流程,不能直接生成新密钥就上传:
- 按照常规流程生成新的RSA算法签名密钥(推荐2048位及以上)
- 打开Google Play Console,进入对应应用的管理页,依次进入「设置」-「应用完整性」-「应用签名」板块
- 选择「升级应用签名密钥」选项,按照页面指引提交升级申请:需要上传新密钥的公钥证书,同时用原有旧密钥对平台提供的验证文件签名,完成身份校验
- 等待平台审核通过(审核周期一般为数小时到1个工作日),审核通过后使用新密钥打包上传即可正常通过校验
注意事项
- 方案1的配置可兼容后续更高版本的Target API适配,不会出现算法相关的签名报错
- 方案2必须等Play审核通过后再使用新密钥打包上传,否则始终会触发签名不匹配的报错
- 无论选择哪种方案,都需要妥善保管密钥文件和对应密码,避免丢失导致无法推送应用更新
内容的提问来源于stack exchange,提问作者JasonHsieh
相关产品推荐
相关产品推荐

