导入Google Play上传证书后签名APK报错,寻求解决方法
解决"Failed to read key mykey from store: trusted certificate entries are not password-protected"签名错误
这个问题其实是个常见的误解——你导入的upload_cert.der是Google Play上传密钥的公钥证书,它只包含公钥,没有对应的私钥,所以这个别名在密钥库里只是一个"可信证书条目",根本没法用来签名APK。签名必须用包含私钥的密钥条目才行。
问题根源拆解
你之前的操作逻辑搞反了:
- 你自己创建的签名密钥(带私钥的那个)是用来本地签名APK的,上传到Google Play后,Google会验证这个签名,然后给你提供
upload_cert.der——这个证书是Google用来确认后续上传的APK确实是你签名的(相当于Google把你的公钥存起来),而不是给你用来本地签名的。
正确操作步骤
找回你最初的有效签名密钥
先确认你原来的密钥库里的私钥条目,用这个命令查看密钥库的所有内容:keytool -list -v -keystore mykeystore.jks找到类型为
PrivateKeyEntry的条目,这个才是真正能用来签名的密钥(你最开始用来签名上传的就是它)。用原始私钥签名APK
直接用这个私钥别名来签名,比如你的原始别名是original_key,命令如下:apksigner sign --ks mykeystore.jks --ks-key-alias original_key your_app.apk这样签名后的APK就能正常上传到Google Play了,因为Google已经通过你之前上传的APK验证过这个密钥的合法性。
清理无效的证书条目(可选)
你之前导入的mykey别名是无效的,完全可以删除,避免混淆:keytool -delete -alias mykey -keystore mykeystore.jks
补充说明(关于App Signing by Google Play)
如果你的应用开启了Google Play应用签名,那流程是这样的:
- 你生成一个上传密钥(带私钥),把它的公钥提供给Google;
- 之后你每次用这个上传密钥签名APK,上传到Google Play后,Google会用它自己的应用签名密钥重新签名你的APK分发给用户;
- 你从Google下载的
upload_cert.der是这个上传密钥的公钥证书,用来验证Google那边的记录,不需要导入到你的本地密钥库。
内容的提问来源于stack exchange,提问作者Ruslan Leshchenko
相关产品推荐
相关产品推荐

