Android Can';由于证书不同,无法将更新的APK上载到Google Play

Android Can';由于证书不同,无法将更新的APK上载到Google Play,android,google-play,apk,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:

我正在使用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]


首先,谷歌游戏在这方面不太可能是错误的。您确定没有错误地使用调试密钥吗

检查使用的签名密钥 您应该使用以下命令仔细检查旧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在页面上明确提到了这一点:

警告:将密钥存储库和私钥保存在安全的地方,并确保它们的备份是安全的。如果您将应用程序发布到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文件中检查密钥库文件的有效期。阿里加图·戈扎伊马苏!