我刚刚注册了Google Play应用签名程序,该程序需要上传发行密钥库的加密版本,并具有创建上传密钥库的“可选”步骤-可选用引号引起来,因为我认为应该一个必需的步骤,但是无论如何,在成功注册之后,我现在得到的是上传证书,我应该以某种方式使用它来签署我将来的应用版本。
到目前为止,我所做的是:我从Android Studio创建了一个新的密钥库,设置了存储和别名密码,并尝试将 upload_cert.der 导入现有的别名-失败:>
keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
keytool错误:java.lang.Exception:答复和密钥库中的公共密钥 不匹配
我还尝试了在不指定别名(或删除现有别名并创建新别名)或使用其他别名的情况下导入上传证书:
keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
...也失败:最终创建了一个名为 mykey 的新别名,该别名没有密码保护,并失败,并显示以下消息:
原因:java.lang.RuntimeException:com.android.ide.common.signing.KeytoolException:无法从商店“ /path/to/upload-keystore.jks”读取密钥上载:受信任的证书条目不是密码保护的
...很自然地,我尝试为别名设置密码:
keytool -keypasswd -alias upload -keystore upload-keystore.jks
也失败,并显示以下消息:
keytool错误:java.lang.Exception:别名没有密钥
...现在我的想法用光了。
在此期间,我已向Google Play支持人员发送了一个问题/请求以更新我的上传密钥,但是,我希望能够解决这种情况(该支持人员的回复速度很慢),因为文档并不暗示必须生成一个上传密钥库并上传该密钥库的加密私钥。因此,说明文件含糊不清/不清楚/错误,或者有一种使用生成的upload_cert.der的方法。有什么想法吗?
修改:
感谢Pierre提供的答案和评论,我意识到,如果您不创建/提供上传密钥,则应使用现有的原始签名密钥,并使用 upload_cert.der 。因此,唯一的要求是通过运行以下命令插入上传证书:
keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
...,您应该能够继续将应用发布到Play商店。
答案 0 :(得分:3)
您上传到Play控制台的.der文件(也可以在Play控制台的“应用签名”页面中下载)不包含私钥,只包含公钥,因此您不会可以用它签名任何东西。
只有您创建的用于生成上传证书的密钥库包含私钥,并且必须用于签名APK(或应用捆绑包)。
换句话说,您不应在注册Play签名后创建另一个密钥库,而应该使用创建的密钥库来生成上传证书来对以后的工件进行签名。
希望有帮助。