Android Sign APK带上传证书(如何确保指纹正确)

时间:2018-04-24 21:19:06

标签: java android visual-studio xamarin signing

这是Google关于签署APK的文档: https://developer.android.com/studio/publish/app-signing.html

文档看起来相当简单。我已经能够将各种其他页面和Stack Overflow线程中的进程拼凑在一起。但是,在我签署APK之后,APK中的SHA-1证书指纹是错误的,这意味着我没有使用正确的证书签署APK。

  

您上传了未使用上传证书签名的APK。   您必须使用相同的证书。上传证书有   指纹:

     

[SHA1:FINGERPRINT]

     

以及用于签署您上传的APK的证书   指纹:

     

[SHA1:FINGERPRINT]

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

这就是我的所作所为:

  • 注册成为Google Developer并在控制台中创建应用
  • 点击App Signing并下载上传证书(upload_cert.der)
  • 然后我使用keytool导入证书并创建密钥库:" C:\ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -importcert -file upload_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_161 \ bin \ keytool" -importcert -file upload_cert.der -genkey -v -keystore [appname] .jks -keyalg RSA -keysize 2048 -validity 10000 -alias [appname]
  • 这成功并推出了.jks密钥库文件
  • 我生成了未签名的APK(存档)
  • 在Visual Studio中,我点击了"分发..." - > Ad Hoc
  • 导入我的密钥库文件,然后点击"另存为"这似乎签署我的APK
  • 然后,我把它上传到商店,但商店拒绝了它说它有错误的指纹。
  • 因此,我也使用了密钥来检查RSA文件中的指纹。 " C:\ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -printcert -file [appname] .RSA。指纹错了。

我缺少哪些步骤?

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

https://developer.android.com/studio/publish/app-signing.html#sign-manually

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

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

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

  

现在,您的现有应用的所有更新都必须通过上传进行签名   键。这样,Google就可以验证您的身份。

这完全合情合理。从本质上讲,我尝试做的就是使用Google的上传密钥对APK进行签名。我有上传密钥。但是,Google没有记录的步骤是如何将上传密钥转换为密钥库,以便我可以使用密钥库对APK进行签名。它看起来很直接,但它不起作用。

1 个答案:

答案 0 :(得分:1)

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

  

如何确保我生成的密钥库使用Google Play控制台中的上传证书?

这是不可能的。根据Google Manage your app signing keys

  

证书:证书包含公钥以及一些额外的证书   识别谁拥有密钥的信息。

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

解决此问题的唯一方法是重置上传密钥,如上面article所示。

您可以参考以下指南,了解xamarin中的发布应用:
Publishing to Google Play
Signing the Android Application Package
Manually Signing the APK