java - 带有上传证书的Android Sign APK(如何确保正确的指纹)
问题描述
这是 Google 关于签署 APK 的文档: https ://developer.android.com/studio/publish/app-signing.html
文档看起来相当简单。我已经能够将来自其他各个页面和 Stack Overflow 线程的进程拼凑起来。但是,在我签署了 APK 之后,APK 中的 SHA-1 证书指纹是错误的,这意味着我没有使用正确的证书签署 APK。
您上传的 APK 未使用上传证书进行签名。您必须使用相同的证书。上传证书有指纹:
[SHA1:指纹]
并且用于签署您上传的 APK 的证书有指纹:
[SHA1:指纹]
我的问题是:如何确保我生成的密钥库正在使用来自 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 "[应用程序名称]" 。这成功了,因为它确实创建了密钥库文件。但是,我的直觉是,这就是过程出错的地方。我不认为证书是进口的。
- 我使用以下命令检查了密钥库: "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 -别名 [应用程序名称]
- 这成功并推出了 .jks 密钥库文件
- 我生成了一个未签名的 APK(存档)
- 在 Visual Studio 中,我单击“分发 ...”-> Ad Hoc
- 导入我的密钥库文件并单击似乎签署了我的 APK 的“另存为”
- 然后,我将它上传到商店,但商店拒绝了它,说它的指纹有误。
- 因此,我也使用密钥来检查 RSA 文件中的指纹。"C:\Program Files\Java\jdk1.8.0_161\bin\keytool" -printcert -file [appname].RSA .指纹错误。
我错过了哪些步骤?
注意:谷歌文档说这是手动签名的过程:
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 签名 --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
但是这些步骤不以任何方式使用上传证书......
现在必须使用您的上传密钥对现有应用的所有更新进行签名。这将允许 Google 验证您的身份。
这是完全有道理的。本质上,我要做的就是用我从谷歌上传的密钥对 APK 进行签名。我有上传密钥。但是,谷歌没有记录的步骤是如何将上传密钥转入密钥库,以便我可以使用密钥库签署 APK。它看起来很直截了当,但它不起作用。
解决方案
看来您丢失了私钥。上传证书是您的第一个上传应用程序的证书,并在您上传时创建。您需要使用该.keystore
文件来签署您的应用程序。
如何确保我生成的密钥库正在使用来自 Google Play 控制台的上传证书?
这是不可能的。根据 Google管理您的应用签名密钥:
证书:证书包含一个公钥以及一些关于谁拥有该密钥的额外标识信息。
证书不包含私钥。所以它不能用来创建密钥库。
解决此问题的唯一方法是重置上传密钥,如上述文章末尾所述。
您可以参考以下指南在 xamarin 中发布应用程序:
发布到 Google Play
签署 Android 应用程序包
手动签署 APK
推荐阅读
- c# - EF 代码首先无法对非复杂空对象进行提交
- java - 使用 Oltu 的 Java Web 服务验证不记名令牌的指南?
- javascript - Can't read child of object
- loops - 从匹配的变量 bash 中打印特定列
- excel - 用于选择多个下拉选项的 VBA 代码不适用于受保护的工作表
- python-3.x - Is there anything known about interfacing between Synergy DBL and Python
- reactjs - React 元素错误地报告窗口的宽度
- python - Print a variable output in a 400 empty message code using Python
- java - How to sort this HashMap while flattening/grouping it, using streams?
- excel - 我可以过滤数据以显示 VBA 中昨天日期的当前月份吗?