这个问题在这里已有答案:
我正在使用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]
1 回答
首先,Google Play不太可能出现问题 . 你确定你没有错误地使用你的调试密钥吗?
检查使用的签名密钥
您应该使用以下命令仔细检查旧APK和新APK包含哪些证书:
这会显示有关每个APK中签名的文件的信息,如下所示:
如果新APK说
X.509, CN=Android Debug, O=Android, C=US
,那么您已使用调试密钥而不是原始版本密钥对APK进行了签名 .如果X.509身份字符串在其他方面不同,或者两个APK之间的证书日期不同,您刚刚确认 not 对两个APK使用相同的签名密钥 .
您可以忽略任何“CertPath not validated”消息;在这种情况下,它不相关 .
搜索原始密钥库
如果证书信息不同,您需要找到原始密钥库,即具有Google Play告诉您的第一个SHA1值的文件 .
搜索您可以找到的所有密钥库文件,直到您拥有具有正确SHA1指纹的密钥库文件:
我找不到原始的密钥库
如果找不到原始密钥库,则 never 能够发布对此特定应用程序的任何更新 .
Android在Signing Your Application页面上明确提及:
After the first release of an APK, all subsequent releases must be signed with the exact same key.
我可以从原始APK中提取原始签名密钥吗?
不,这是不可能的 . APK仅包含公共信息,而不包含您的私钥信息 .
我可以迁移到新的签名密钥吗?
不会 . 即使您找到了原始内容,也无法使用密钥A签署APK,然后使用密钥A和B签署下一个更新,然后仅使用密钥B签署下一个更新 .
在技术上可以使用多个密钥签署APK(或任何JAR文件),但Google Play不接受具有多个签名的APK .
我该怎么办?
您必须使用新的应用程序ID构建应用程序(例如,从“com.example.myapp”更改为“com.example.myapp2”)并在Google Play上创建一个全新的商家信息 .
可能您还需要更改代码,以便人们可以安装新应用,即使他们安装了旧应用,例如您需要确保没有冲突的内容提供商 .
您将丢失现有的安装基础,评论等,并且必须找到一种方法让现有客户卸载旧应用并安装新版本 .
同样,请确保您拥有用于此版本的密钥库和密码的备份 .