【问题标题】:Can't upload updated APK to Google Play due to different certificate [duplicate]由于证书不同,无法将更新的 APK 上传到 Google Play [重复]
【发布时间】:2014-12-04 23:06:41
【问题描述】:

我正在使用 Android Studio 构建我的 Android 项目,当我将我的 APK 上传到 Google Play 时,尽管使用了我之前使用的 same keystore,但它一直向我显示此错误我的应用版本:

上传失败

您上传的 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]

【问题讨论】:

    标签: android google-play apk


    【解决方案1】:

    首先,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 未验证”消息;在这种情况下它不相关。

    搜索原始密钥库

    如果证书信息不同,你需要找到原来的keystore,即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”)并在 Google Play 上创建一个全新的列表。

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

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

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

    【讨论】:

    • 我已将此希望最全面的答案添加到此问题的“规范”版本中,因此我将关闭此问题作为副本。
    • 它拯救了我的一天。我使用相同的密钥库但不同的释放密钥。谢谢您的帮助。 :)
    • 拯救了我的一天!找到了我的密钥库,但意识到我使用了错误的密钥名称 :)
    • 真的拯救了我的一天。我不知道我们可以从 apk 文件中检查 Keystore 文件的到期情况。 Arigatou Gozaimasu!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多