使用提供的 upload_cert.der 签署一个发布的 Android APK 文件

Boj*_*ski 11 android keystore google-play android-app-signing

我刚刚注册了 Google Play App Signing 计划,该计划需要上传发布密钥库的加密版本,并且有一个“可选”步骤来创建上传密钥库 - 可选用引号引起来,因为我认为这应该是一个必需步骤,但无论如何,在成功注册后,我现在留下了一个上传证书,我应该以某种方式使用它来签署我未来的应用程序版本。

到目前为止我所做的:我从 Android Studio 创建了一个新的密钥库,设置了存储和别名密码,并尝试将upload_cert.der导入现有别名 - 失败:

keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配

我还尝试在不指定别名(或删除现有别名并创建新别名)或使用不同别名的情况下导入上传证书:

keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

...也失败了:最终创建了一个名为mykey的新别名,该别名不受密码保护并且失败并显示消息:

引起:java.lang.RuntimeException:com.android.ide.common.signing.KeytoolException:无法从存储“/path/to/upload-keystore.jks”读取密钥上传:受信任的证书条目不受密码保护

...所以很自然地,我尝试为别名设置密码:

keytool -keypasswd -alias upload -keystore upload-keystore.jks
Run Code Online (Sandbox Code Playgroud)

失败以及消息:

keytool 错误:java.lang.Exception:Alias 没有密钥

......现在我已经没有想法了。

与此同时,我已向 Google Play 支持人员发送了一个问题/请求以更新我的上传密钥,但是,我希望有一种解决方案(支持人员回复有点慢),因为文档没有t 以任何方式暗示需要生成上传密钥库并上传该密钥库的加密私钥。因此,要么文档含糊不清/不清楚/错误,要么有一种方法可以使用生成的upload_cert.der。有什么想法吗?

编辑:

感谢Pierre提供的回答和评论,我意识到如果您不创建/提供上传密钥,则应使用您现有的原始签名密钥和upload_cert.der。因此,唯一的要求是通过运行插入上传证书:

keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
Run Code Online (Sandbox Code Playgroud)

...您应该能够继续将您的应用程序发布到 Play 商店。

Pie*_*rre 6

您上传到 Play 管理中心的 .der 文件(也可以在 Play 管理中心的应用签名页面下载)不包含私钥,它只包含公钥,因此您将无法用它签署任何东西。

只有您为生成上传证书而创建的密钥库包含私钥,并且必须用于签署您的 APK(或 App Bundle)。

换句话说,您不应该在注册 Play Signing 后创建另一个密钥库,您应该使用您创建的密钥库来生成上传证书来签署您未来的工件。

希望有帮助。

  • 是的,这有助于使事情更清楚,但不幸的是并没有解决我的问题。问题是我在注册之前没有创建上传密钥库,因为当时这是一个“可选”步骤,而 Google 只是自己创建了上传证书,它没有连接到我曾经拥有的密钥库。希望这能让我的问题更清楚一些......我试图弄清楚如果无法使用自动生成的upload_cert.der,为什么允许这样做 (4认同)
  • 如果您在注册时没有向 Google Play 提供上传证书,那么 Play 会将您的签名密钥视为您的上传密钥,并且您应该继续上传使用相同原始密钥签名的 APK/Bundles。如果您想使用不同的密钥对上传的工件进行签名,则需要通过联系支持团队来重置它,就像您所做的那样。 (2认同)