Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Java Android使用上传证书签署APK(如何确保指纹正确)_Java_Android_Visual Studio_Xamarin_Signing - Fatal编程技术网

Java Android使用上传证书签署APK(如何确保指纹正确)

Java Android使用上传证书签署APK(如何确保指纹正确),java,android,visual-studio,xamarin,signing,Java,Android,Visual Studio,Xamarin,Signing,这是谷歌关于签署APK的文档: 文件似乎相当直截了当。我已经能够从各种其他页面和堆栈溢出线程中拼凑出进程。但是,在我签署了APK之后,APK中的SHA-1证书指纹是错误的,这意味着我没有用正确的证书签署APK 您上载了一个未使用上载证书签名的APK。 您必须使用相同的证书。上载证书已过期 指纹: [SHA1:指纹] 还有你上传的APK签名证书 指纹: [SHA1:指纹] 我的问题是:如何确保生成的密钥库使用的是来自Google Play控制台的上传证书? 以下是我所做的: 注册成为Googl

这是谷歌关于签署APK的文档:

文件似乎相当直截了当。我已经能够从各种其他页面和堆栈溢出线程中拼凑出进程。但是,在我签署了APK之后,APK中的SHA-1证书指纹是错误的,这意味着我没有用正确的证书签署APK

您上载了一个未使用上载证书签名的APK。 您必须使用相同的证书。上载证书已过期 指纹:

[SHA1:指纹]

还有你上传的APK签名证书 指纹:

[SHA1:指纹]

我的问题是:如何确保生成的密钥库使用的是来自Google Play控制台的上传证书?

以下是我所做的:

  • 注册成为Google开发者,并在控制台中创建应用程序
  • 点击应用程序签名并下载上传证书(Upload_cert.der)
  • 然后,我使用keytool导入证书并创建密钥库:“C:\Program Files\Java\jdk1.8.0\u 161\bin\keytool”-importcert-file upload\u cert.der-keystore[appname].jks-alias“[appname]”。它成功地创建了密钥库文件。但是,我的直觉是,这就是过程出错的地方。我认为证书不是进口的
  • 我用以下命令检查密钥库:“C:\Program Files\Java\jdk1.8.0_161\bin\keytool”-list-keystore[appname].jks和输出的指纹与上载证书的指纹完全不同
  • 我还尝试: “C:\Program Files\Java\jdk1.8.0\u 161\bin\keytool”-importcert-file upload\u cert.der-genkey-v-keystore[appname]。jks-keyalg RSA-keysize 2048-validity 10000-别名[appname]
  • 这成功地推出了.jks密钥库文件
  • 我生成了一个未签名的APK(存档)
  • 在Visual Studio中,我单击了“分发…”->Ad Hoc
  • 导入我的密钥库文件并单击“另存为”,它似乎对我的APK进行了签名
  • 然后,我把它上传到商店,但商店拒绝了,说它有错误的指纹
  • 因此,我也使用了密钥来检查RSA文件中的指纹。“C:\Program Files\Java\jdk1.8.0\U 161\bin\keytool”-printcert-file[appname].RSA。指纹错误
我遗漏了哪些步骤?

注意:Google文档说明这是手动签名的过程:

keytool-genkey-v-keystore my-release-key.jks -keyalg RSA-密钥大小2048-有效期10000-别名我的别名

apksigner sign--ks my-release-key.jks--out my-app-release.apk my-app-unsigned-aligned.apk

但这些步骤不会以任何方式使用上载证书

您现有应用的所有更新现在必须与您的上载一起签名 钥匙这将允许谷歌验证你的身份


这完全有道理。本质上,我所要做的就是用我的谷歌上传密钥在APK上签名。我有上传密钥。但是,Google没有记录的步骤是如何将上传密钥转入密钥库,以便我可以使用密钥库对APK进行签名。它看起来很简单,但不起作用。

您似乎丢失了私钥。上载证书是您第一个上载应用程序的证书,并在上载时创建。您需要使用该
.keystore
文件对应用程序进行签名

如何确保生成的密钥库使用来自Google Play控制台的上载证书

这是不可能的。据谷歌称:

证书:证书包含一个公钥和一些额外的密钥 识别有关谁拥有密钥的信息

证书不包含私钥。所以它不能用来创建密钥库

解决这一问题的唯一方法是按照上文末尾所述重置上传键

有关xamarin中的发布应用程序,请参阅以下指南:



你说得对。发生的事情是,我创建了一个密钥库,用它签署了我的APK,将其上传到存储,然后删除了密钥库。所以,问题不是我需要将上传证书导入密钥库。那根本不可能。问题是我需要使用原始密钥库。我的问题的措辞确实不正确,我需要修改它,以便正确回答问题。我或多或少认为这个过程比以前复杂得多。让我困惑的是play store给了我一个应用程序证书和一个上传证书。我以为他们想让我在上传应用程序之前先用其中一个软件签名。我不明白他们为什么要我创建一个临时密钥库。但是,现在我意识到这是因为第一个密钥库被认为是应用程序生命周期中唯一的终极密钥库。我想我还是不明白他们为什么要费心给我们看证书。它们看起来很重要,但谷歌管理着它们,那么向我们展示它们又有什么意义呢?@MelbourneDeveloper它通常使用
非对称加密
来签署apk,比如RSA。它有一对公钥和私钥。例如,如果您有许多应用程序,它们使用不同的私钥进行签名,您可以通过google中显示的证书找到正确的私钥。@BillyLiu MSFT hi,我已使用现有的应用程序
.keystore
,启用了google应用程序签名,我面临的问题是,我当前的版本显示了不同的
SHA-1
密钥,尽管我用相同的
.keystore