【发布时间】:2018-01-28 20:29:51
【问题描述】:
我正在尝试更新 Google Play 上的版本。上传我签名的 APK 后,我在 Google Play 控制台中收到了以下错误消息:
您上传的 APK 未使用上传证书进行签名。您必须使用相同的证书。上传证书有指纹:
[ SHA1:(SHA1 哈希已编辑) ]
并且用于签署您上传的 APK 的证书有指纹:
[ SHA1:(不匹配的 SHA1 哈希已编辑) ]
我尝试了许多不同的方法来签署我的 APK(原始密钥库、不同的密码组合、新的密钥库、不同的密钥组合等),但都没有成功。
我相当确信密钥库是原始密钥库,因为我已将它备份在外部驱动器上,并且两个版本的文件的更新日期都比原始版本早了大约 30 分钟(那时我生成了第一个签名的 APK)。
由于我使用了 Google Play 应用签名(并且预期的 SHA1 哈希与我的 Play 控制台上的“应用签名”选项卡中的上传证书 SHA1 哈希相同)我认为我需要将证书导入到我的密钥库中用于上传原始版本 APK。
这是我的结果,我已经反复检查了一段时间,以确保它们不是由简单的错字引起的(编辑部分按值分组为颜色,如有必要,我可以发布大部分):
请注意,keystorePass 和实际的 keyPass 被指定为不同的通道,因此对两者使用 keystorePass 会返回“无法恢复密钥”UnrecoverableKeyException,而使用 keyPass 作为密钥会给出一般情况异常“回复中的公钥和密钥库不匹配。”
我的一些研究表明,如果keystorePass 和keyPass 不相同,就会出现这个问题。建议的解决方案是使用 keytool 将keyPass 更改为与keystorePass 相同,但是在我认为成功的 keytool keypasswd 更改之后,我仍然收到异常“回复的公钥和密钥库不匹配。”使用旧的 keyPass 会返回预期的错误密码异常。截图如下:
出于故障排除的目的,我尝试将证书直接添加到密钥库中。这是使用keystorePass 的成功,并为我提供了来自Google Play 应用签名的uploade_cert.der 文件的预期SHA1 哈希:
我还尝试创建一个新的密钥库(以及具有相同密码的原始密钥库和新密钥库中的新密钥),但尝试在成功导入密钥工具上传证书后使用带有新密钥库的 Android Studio 生成签名 APK ,我收到此 Android Studio 错误:“受信任的证书条目不受密码保护”
我已经在我的 gradle 应用文件 (signingConfigs{release{keyAlias, keyPassword, storeFile, storePassword}}) 中使用原始和新信息尝试了所有这些步骤,但没有运气。很想更新我的应用程序,任何提示或帮助将不胜感激。
【问题讨论】:
-
更改密钥别名的密码以匹配密钥库工作正常,但无论如何尝试访问密钥库时,密钥库密码都会失败,并显示“回复的公钥和密钥库不匹配”——不是“密钥库被篡改或密码不正确”的常见错误传递错误。另外,再次尝试将密钥别名密码更改为与密钥库相同的密码可以使密钥库密码通过验证,但是在输入密钥密码时会出错:“密码必须不同”,这意味着它确实是相同且正确的密钥!什么? :P
-
我通过列出密钥库中的密钥进行了检查,它接受了密钥库传递没有问题,即使它不会接受 importcert keytool 命令。
-
我还专门检查了密钥别名本身的 keytool 列表,该命令也可以正常使用密码。那么为什么我不能导入证书呢?
标签: android-studio apk keytool android-keystore google-play-console