无法使用 Google Play 应用签名上传证书(使用原始密钥库)更新版本 APK

Cannot update release APK using Google Play app signing upload certificate (with original keystore)

我正试图在 Google Play 上更新一个版本。上传我签名的 APK 后,我在 Google Play 控制台中收到此错误消息:

You uploaded an APK that is not signed with the upload certificate. You must use the same certificate. The upload certificate has fingerprint:

[ SHA1: (SHA1 hash redacted) ]

and the certificate used to sign the APK you uploaded have fingerprint:

[ SHA1: (Mismatched SHA1 hash redacted) ]

我尝试了许多不同的方法来签署我的 APK(原始密钥库、不同的密码组合、新的密钥库、不同的密钥组合等),但 none 已经成功了。

我相当有信心密钥库是原始密钥库,因为我已将其备份在外部驱动器上,并且文件的两个版本的更新日期都比原始版本早大约 30 分钟(这是我生成了第一个签名的 APK)。

因为我使用了 Google Play 应用程序签名(并且预期的 SHA1 哈希值与我的 Play 控制台 'App Signing' 选项卡中的上传证书 SHA1 哈希值相同)我认为我需要将证书导入我用来上传原始版本 APK 的密钥库。

这是我的结果,我已经反复检查了一段时间,以确保它们不是由简单的拼写错误引起的(编辑部分按值按颜色分组,我可以 post 大多数如有必要):

请注意 keystorePass 和实际的 keyPass 被指定为不同的传递,因此对 returns 和 "Cannot recover key" UnrecoverableKeyException 使用 keystorePass , 而使用 keyPass 作为键给出了一般异常 "Public keys in reply and keystore don't match."

我的一些研究发现,如果 keystorePasskeyPass 不相同,那么就会出现这个问题。建议的解决方案是使用 keytool 将 keyPass 更改为与 keystorePass 相同,但在我假设成功更改 keytool keypasswd 之后,我仍然遇到异常 "Public keys in reply and keystore don't match." 使用old keyPass returns 预期的密码错误异常。这是屏幕截图:

出于故障排除目的,我尝试将证书直接添加到密钥库。这是使用 keystorePass 的成功,并为我提供了来自 Google Play app signing:

uploade_cert.der 文件的预期 SHA1 哈希值

我还尝试创建一个新的密钥库(以及使用相同密码在原始密钥库和新密钥库中创建新密钥),但在之后尝试使用 Android Studio 和新密钥库生成签名的 APK成功导入 keytool 上传证书,我收到此 Android Studio 错误:"trusted certificate entries are not password-protected"

我已经在我的 gradle 应用程序文件 ( signingConfigs{release{keyAlias, keyPassword, storeFile, storePassword}} ) 中尝试了所有这些带有原始信息和新信息的步骤,但没有成功。很想更新我的应用程序,如有任何提示或帮助,我们将不胜感激。

您必须尝试以下程序:

  1. 使用用于签署第一个版本的 APK 的 PEPK 工具(在您的 Google 控制台上可用)加密您的私钥 (yourKeyStore.jks)。
  2. 生成一个新密钥(例如 apk-upload),然后从上传的密钥中提取证书-key.pem。
  3. 将 upload-key.pem 上传到您的 Google 帐户。
  4. 使用新密钥 (apk-upload) 签署您的发布 APK。

您将在本文中找到不同的命令和更多详细信息:

https://medium.com/mindorks/securing-and-optimizing-your-app-with-google-play-app-signing-24a3658fd319

编辑:(来自评论)我认为如果您已经注册了 Google App Signings,您必须联系 Google 支持才能为您提供上传新私钥或获取旧私钥的能力...当您订阅 Google App Signings 时给出的选项,我认为如果您有已经注册 Google 应用程序签名。

(Asker 的编辑:不要像使用原始密钥别名本身那样为密钥库使用不同的密码。确保 keystorePass 和 keyPass 完全匹配。如果您已经使用不同的通行证上传了 keystore/key,请按照 Google 支持页面上的步骤使用 App Signing 重置您的密钥库。)