由于证书不同,无法将更新的APK上传到Google Play

时间:2014-10-09 21:31:57

标签: android google-play apk

我正在使用Android Studio构建我的Android项目,当我将我的APK上传到Google Play时,尽管使用了之前用过的相同的密钥库,它仍然向我显示此错误我的应用程序版本:

  

上传失败

     

您上传了使用其他证书签名的APK到之前的APK。您必须使用相同的证书。

     

您现有的APK使用带有指纹的证书进行签名:
  [SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96:4F:84:DD:BA:33]
  用于签署您上传的APK的证书有指纹:
  [SHA1:20:26:F4:C1:DF:0F:2B:D9:46:03:FF:AB:07:B1:28:7B:9C:75:44:CC]

1 个答案:

答案 0 :(得分:42)

首先,Google Play在这里不太可能出错。你确定你没有错误地使用你的调试密钥吗?

检查使用的签名密钥

您应该使用以下命令仔细检查旧APK和新APK包含哪些证书:

jarsigner -verify -verbose:summary -certs old.apk
jarsigner -verify -verbose:summary -certs new.apk

这会显示有关每个APK中签名文件的信息,如下所示:

sm  4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)

    X.509, CN=My App, O=My Company, C=DE, L=Köln
    [certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
    [CertPath not validated: Path does not chain with any of the trust anchors]

如果新版APK显示X.509, CN=Android Debug, O=Android, C=US,那么您已使用调试密钥而非原始版本密钥对APK进行了签名。

如果X.509身份字符串不同,或者两个APK之间的证书日期不同,您刚刚确认使用相同的签名密钥的APK。

您可以忽略任何未验证的" CertPath"信息;在这种情况下,它不相关。

搜索原始密钥库

如果证书信息不同,您需要找到原始密钥库,即具有Google Play告诉您的第一个SHA1值的文件。

搜索您可以找到的所有密钥库文件,直到您拥有具有正确SHA1指纹的文件:

keytool -list -keystore my-release.keystore

我无法找到原始密钥库

如果找不到原始密钥库,则永远不会能够发布此特定应用的任何更新。

Android在Signing Your Application页面上明确提到了这一点:

  

警告:将密钥库和私钥保存在安全可靠的位置,并确保对其进行安全备份。 如果您将某个应用程序发布到Google Play,然后丢失了您为该应用程序签名的密钥,那么您将无法向您的应用发布任何更新,因为您必须始终使用相同的密钥对所有版本的应用进行签名

首次发布APK后,所有后续版本都必须使用完全相同的密钥签名。

我可以从原始APK中提取原始签名密钥吗?

没有。这是不可能的。 APK仅包含公共信息,而不包含您的私钥信息。

我可以迁移到新的签名密钥吗?

没有。即使您找到了原始内容,也无法使用密钥A对APK进行签名,然后使用密钥A和B签署下一次更新,然后仅使用密钥B签署下一次更新。

签署具有多个技术键的APK(或任何JAR文件),但Google Play不接受具有多个签名的APK。

我该怎么办?

您必须使用新的应用程序ID构建应用程序(例如,从" com.example.myapp"更改为" com.example.myapp2")并创建一个全新的应用程序ID在Google Play上市。

可能您还需要更改代码,以便人们可以安装新应用,即使他们安装了旧应用,例如您需要确保没有冲突的内容提供商。

您将丢失现有的安装基础,评论等,并且必须找到让现有客户卸载旧应用并安装新版本的方法。

再次确保您拥有用于此版本的密钥库和密码的备份。