Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用提供的upload_cert.der签署Android APK发布文件_Android_Google Play_Keystore_Android App Signing - Fatal编程技术网

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

使用提供的upload_cert.der签署Android APK发布文件,android,google-play,keystore,android-app-signing,Android,Google Play,Keystore,Android App Signing,我刚刚注册了Google Play应用程序签名程序,该程序需要上传一个加密版本的发布密钥库,并且有一个创建上传密钥库的“可选”步骤-可选的在引号中,因为我认为这应该是一个必需的步骤,但无论如何,在成功注册之后,我现在只剩下一个上传证书,我应该用它来签署我未来的应用程序版本 到目前为止我所做的:我从Android Studio创建了一个新的密钥库,设置了存储和别名密码,并尝试将上载证书der导入现有别名-失败: keytool -importcert -file upload_cert.der -

我刚刚注册了Google Play应用程序签名程序,该程序需要上传一个加密版本的发布密钥库,并且有一个创建上传密钥库的“可选”步骤-可选的在引号中,因为我认为这应该是一个必需的步骤,但无论如何,在成功注册之后,我现在只剩下一个上传证书,我应该用它来签署我未来的应用程序版本

到目前为止我所做的:我从Android Studio创建了一个新的密钥库,设置了存储和别名密码,并尝试将上载证书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。有什么想法吗

编辑:

多亏了提供的回答和评论,我意识到如果您不创建/提供上载密钥,则应使用您现有的原始签名密钥,使用upload\u cert.der。因此,唯一的要求是通过运行以下命令插入上载证书:

keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks

…并且您应该能够继续将应用程序发布到Play Store。

您上载到Play Console的.der文件(也可以在Play Console的应用程序签名页面中下载)不包含私钥,它只包含公钥,因此您将无法使用它进行任何签名

只有为生成上载证书而创建的密钥库包含私钥,并且必须用于对APK(或应用程序包)进行签名

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


希望这有帮助。

是的,这有助于让事情变得更清楚,但不幸的是,这并不能解决我的问题。问题是,我在注册之前没有创建上传密钥库,因为当时这是一个“可选”步骤,而谷歌只是自己创建了上传证书,它没有连接到我曾经拥有的密钥库。希望这能让我的问题更清楚一点。。。我试图弄清楚,如果无法使用自动生成的upload_cert.deri,为什么允许这样做。如果你在登入时没有向Google Play提供上传证书,那么Play会将你的签名密钥视为你的上传密钥,你应该继续上传使用相同原始密钥签名的APK/捆绑包。如果你想用不同的密钥对上传的工件进行签名,那么你需要像以前那样联系支持团队来重置它。如果是这样,很好,如果我仍然可以使用我的旧签名密钥,这是一个选项。。。谢谢,我会尝试一下,如果可行的话,我会接受答案。