java - 使用不同指纹进行 keystore 签名

标签 java android

我在签名和上传 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/

相关文章:

android - 当设备重启并强制关闭应用程序时,Redmi 和其他自定义中文 ROM 中未收到 WorkManager doWork 回调

android - 根据其他设置在代码中构建首选项屏幕

java - 有关执行操作和使用具有多个 View 的单个模型的不确定性

Java - 对字符串数组进行排序/按字母顺序排列

java - 将 EditText 和 Spinner 数据插入 SQLite?

java - 每秒更改 TextView 文本

java - 在 EditText 上调用 setCustomSelectionActionModeCallback() 后如何修复上下文菜单栏功能(复制/粘贴等)?

android - 使用 ADB 在 Android 上粘贴文本?

java - 如何在选择另一个选项之前检查用户是否输入了某些内容?

java - 无法单击类 div SELENIUM