无法使用 Android Studio 签署 APK - 出现异常:DerInputStream.getlength()

问题描述

我刚刚继承了一个 2013 年创建的旧项目。

Keystore 可能是用 jdk 7 创建的。

当我尝试在 Android Studio生成 APK 时,抛出异常:
无法加载密钥存储:无法初始化,java.io.IOException:DerInputStream.getLength():发现冗余长度字节

enter image description here

我尝试的是:

  • 将密钥库转换为 pk12 - 这里我遇到了与上面相同的异常
  • 在 KeyStore Explorer 中打开密钥库 - 也不工作,我无法查看密钥
  • 我也尝试联系谷歌(Play 商店支持),但他们的回答是“我们的团队没有接受过为密钥提供技术支持的培训。”

相关帖子:
Android keystore corrupted
Unable to open keystore in AndroidStudio - "Redundant length bytes found"

我不知道接下来要做什么。

唯一有效的方法是在终端中手动签署未签名的 apk。
解决方案不是最佳的。 此外,它仅适用于使用旧的 jdk 版本(在这种情况下为 jdk1.7.0_80) 所以我不能长期使用这个解决方案。

解决方法

好吧,我没有尝试修复原始密钥库,而是通过转移到 Play 应用签名来解决它。

我创建了一个新的上传密钥,从现在开始我将使用它来创建签名的 APK。

对于那些可能有帮助的人:

  • 签署它以播放商店并导航到您的应用程序

  • 转到设置 -> 应用完整性

  • 选择从 Java 密钥库导出并上传密钥,然后按照说明操作*

*请注意,在此阶段您可能会遇到与上述相同的异常 (DerInputStream.getlength()....).
发生这种情况是因为私钥生成命令使用 java - 与首先导致异常的 Java 版本相同。
所以这里有一个问题:
您应该使用不同的 java 8 版本,在该版本中不会发生异常(例如 1.8.0_112)。
它不适用于 java 7 及更早版本,因为 pepk 工具是用 java 8 构建的。

像这样:

/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/bin/java -jar pepk.jar ....

从这里继续创建新的上传密钥,您应该已完成所有设置。

,

这可能对你有帮助。下面是同样的情况,在 JDK 7 上生成的 keystore 无法用 JDK 8 读取。

https://forum.unity.com/threads/keystore-generated-on-jdk-7-unable-to-read-with-jdk-8.460020/