使用提供的 upload_cert.der 签署发布 Android APK 文件
Use provided upload_cert.der to sign a release Android APK file
我刚刚加入了 Google Play App Signing 计划,该计划需要上传发布密钥库的加密版本,并且有一个 "optional" 创建上传密钥库的步骤 - 可选引号,因为我认为这应该是必需的步骤,但无论如何,在成功注册后,我现在剩下一个 上传证书,我应该以某种方式使用它来签署我未来的应用程序发布。
到目前为止我做了什么:我从 Android Studio 创建了一个新的密钥库,设置了存储和别名密码并尝试导入 upload_cert.der 到现有别名 - 失败:
keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
keytool error: java.lang.Exception: Public keys in reply and keystore
don't match
我还尝试过在不指定别名(或删除现有别名并创建新别名)或使用不同别名的情况下导入上传证书:
keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
...也失败了:最终创建了一个名为 mykey 的新别名,它没有密码保护并且失败并显示消息:
Caused by: java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Failed to read key upload from store "/path/to/upload-keystore.jks": trusted certificate entries are not password-protected
...很自然地,我尝试为别名设置密码:
keytool -keypasswd -alias upload -keystore upload-keystore.jks
同样失败并显示消息:
keytool error: java.lang.Exception: Alias has no key
...现在我 运行 没主意了。
与此同时,我已经向 Google Play 支持发送了一个 question/request 来更新我的上传密钥,但是,我希望有解决这个问题的方法(支持是回复有点慢),因为文档并不以任何方式暗示生成上传密钥库并上传该密钥库的加密私钥是必需的。因此,要么文档是 vague/unclear/wrong,要么有一种方法可以使用生成的 upload_cert.der。有什么想法吗?
编辑:
感谢 Pierre 提供的回答和评论,我意识到如果您没有 create/provide 上传密钥,则应使用您现有的原始签名密钥,并使用 upload_cert.der。因此,唯一的要求是通过 运行ning 插入上传证书:
keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
...您应该能够继续将您的应用程序发布到 Play 商店。
您上传到 Play 管理中心的 .der 文件(也可以在 Play 管理中心的 App Signing 页面下载)不包含私钥,它只包含 public 密钥, 所以你不能用它签署任何东西。
只有您创建的用于生成上传证书的密钥库包含私钥并且必须用于签署您的 APK(或 App Bundle)。
换句话说,您不应该在注册 Play Signing 后创建另一个密钥库,您应该使用您创建的密钥库来生成上传证书来签署您未来的工件。
希望对您有所帮助。
我刚刚加入了 Google Play App Signing 计划,该计划需要上传发布密钥库的加密版本,并且有一个 "optional" 创建上传密钥库的步骤 - 可选引号,因为我认为这应该是必需的步骤,但无论如何,在成功注册后,我现在剩下一个 上传证书,我应该以某种方式使用它来签署我未来的应用程序发布。
到目前为止我做了什么:我从 Android Studio 创建了一个新的密钥库,设置了存储和别名密码并尝试导入 upload_cert.der 到现有别名 - 失败:
keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
keytool error: java.lang.Exception: Public keys in reply and keystore don't match
我还尝试过在不指定别名(或删除现有别名并创建新别名)或使用不同别名的情况下导入上传证书:
keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
...也失败了:最终创建了一个名为 mykey 的新别名,它没有密码保护并且失败并显示消息:
Caused by: java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Failed to read key upload from store "/path/to/upload-keystore.jks": trusted certificate entries are not password-protected
...很自然地,我尝试为别名设置密码:
keytool -keypasswd -alias upload -keystore upload-keystore.jks
同样失败并显示消息:
keytool error: java.lang.Exception: Alias has no key
...现在我 运行 没主意了。
与此同时,我已经向 Google Play 支持发送了一个 question/request 来更新我的上传密钥,但是,我希望有解决这个问题的方法(支持是回复有点慢),因为文档并不以任何方式暗示生成上传密钥库并上传该密钥库的加密私钥是必需的。因此,要么文档是 vague/unclear/wrong,要么有一种方法可以使用生成的 upload_cert.der。有什么想法吗?
编辑:
感谢 Pierre 提供的回答和评论,我意识到如果您没有 create/provide 上传密钥,则应使用您现有的原始签名密钥,并使用 upload_cert.der。因此,唯一的要求是通过 运行ning 插入上传证书:
keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
...您应该能够继续将您的应用程序发布到 Play 商店。
您上传到 Play 管理中心的 .der 文件(也可以在 Play 管理中心的 App Signing 页面下载)不包含私钥,它只包含 public 密钥, 所以你不能用它签署任何东西。
只有您创建的用于生成上传证书的密钥库包含私钥并且必须用于签署您的 APK(或 App Bundle)。
换句话说,您不应该在注册 Play Signing 后创建另一个密钥库,您应该使用您创建的密钥库来生成上传证书来签署您未来的工件。
希望对您有所帮助。