我在签名和上传 Android 应用程序时遇到奇怪的问题。
我们收到了此 JKS 文件。当我运行时:
keytool -list -v -keystore key.jks -storepass THE_PASSWORD -keypass THE_PASSWORD
要列出有关它的所有信息,我得到以下信息:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: 1
Creation date: 12 Feb 2016
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=..., OU=..., O=..., C=ZA
Issuer: CN=..., OU=..., O=..., C=ZA
Serial number: ********
Valid from: Sun Apr 28 17:21:31 SAST 2013 until: Thu Apr 29 17:21:31 SAST 2038
Certificate fingerprints:
MD5: D5:A5:CF:***
SHA1: 55:18:5F:***
SHA256: DC:36:CF:***
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
codeSigning
]
但是,当使用 Android Studio 时,我尝试生成签名的 APK 并使用此 JKS 文件,除了使用不同的 key 之外,还会生成构建和 apk?
当我运行时:
keytool -list -printcert -jarfile app-release.apk
我得到以下输出:
Owner: CN=..., OU=..., O=..., C=ZA
Issuer: CN=..., OU=..., O=..., C=ZA
Serial number: ********
Valid from: Sun Apr 28 17:21:31 SAST 2013 until: Thu Apr 29 17:21:31 SAST 2038
Certificate fingerprints:
MD5: EC:FB:D6:***
SHA1: 40:A3:F0:***
SHA256: 40:41:3C:***
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
codeSigning
]
请注意,所有信息都是相同的...序列号、所有者、发行者以及除指纹之外的所有信息。
我没有在 Debug模式下对其进行签名,我的 Gradle 文件指向正确的 JKS 文件。
出于测试目的,我尝试了不同的 JKS 文件。并查看了 JKS 文件与 APK 的比较,所有信息都是正确的。包括 SHA1 key 。
有什么我可以尝试的,或者有什么我必须错过的小事吗?
提前谢谢大家。
最佳答案
在经历了漫长的时光后,我终于解决了这个问题。
使用的 keystore 是最初从 .p12 文件转换而来的文件。尽管新的 keystore 文件包含正确的指纹和正确的格式,但 Android Studio 中存在一个错误,如果 .p12 文件未正确转换或 Android Studio 未通过正确的指纹,则不会使用正确的指纹对其进行签名使用此 keystore 文件签署 APK 时的值。
您需要手动签署 APK。这是一种使命。因此,我制作了一个自动化脚本来为您完成此操作。
https://github.com/SierraII/morphthis
此脚本将使用指定的 keystore 文件对 APK 文件进行签名。无论之前是否已签名,APK 文件都会被签名。
任何遇到此问题的人,我希望这可以为您节省 3 天!
关于java - 使用不同指纹进行 keystore 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35404931/