无法使用 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."
我的一些研究发现,如果 keystorePass
和 keyPass
不相同,那么就会出现这个问题。建议的解决方案是使用 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}}
) 中尝试了所有这些带有原始信息和新信息的步骤,但没有成功。很想更新我的应用程序,如有任何提示或帮助,我们将不胜感激。
您必须尝试以下程序:
- 使用用于签署第一个版本的 APK 的 PEPK 工具(在您的 Google 控制台上可用)加密您的私钥 (yourKeyStore.jks)。
- 生成一个新密钥(例如 apk-upload),然后从上传的密钥中提取证书-key.pem。
- 将 upload-key.pem 上传到您的 Google 帐户。
- 使用新密钥 (apk-upload) 签署您的发布 APK。
您将在本文中找到不同的命令和更多详细信息:
编辑:(来自评论)我认为如果您已经注册了 Google App Signings,您必须联系 Google 支持才能为您提供上传新私钥或获取旧私钥的能力...当您订阅 Google App Signings 时给出的选项,我认为如果您有已经注册 Google 应用程序签名。
(Asker 的编辑:不要像使用原始密钥别名本身那样为密钥库使用不同的密码。确保 keystorePass 和 keyPass 完全匹配。如果您已经使用不同的通行证上传了 keystore/key,请按照 Google 支持页面上的步骤使用 App Signing 重置您的密钥库。)
我正试图在 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."
我的一些研究发现,如果 keystorePass
和 keyPass
不相同,那么就会出现这个问题。建议的解决方案是使用 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}}
) 中尝试了所有这些带有原始信息和新信息的步骤,但没有成功。很想更新我的应用程序,如有任何提示或帮助,我们将不胜感激。
您必须尝试以下程序:
- 使用用于签署第一个版本的 APK 的 PEPK 工具(在您的 Google 控制台上可用)加密您的私钥 (yourKeyStore.jks)。
- 生成一个新密钥(例如 apk-upload),然后从上传的密钥中提取证书-key.pem。
- 将 upload-key.pem 上传到您的 Google 帐户。
- 使用新密钥 (apk-upload) 签署您的发布 APK。
您将在本文中找到不同的命令和更多详细信息:
编辑:(来自评论)我认为如果您已经注册了 Google App Signings,您必须联系 Google 支持才能为您提供上传新私钥或获取旧私钥的能力...当您订阅 Google App Signings 时给出的选项,我认为如果您有已经注册 Google 应用程序签名。
(Asker 的编辑:不要像使用原始密钥别名本身那样为密钥库使用不同的密码。确保 keystorePass 和 keyPass 完全匹配。如果您已经使用不同的通行证上传了 keystore/key,请按照 Google 支持页面上的步骤使用 App Signing 重置您的密钥库。)