问题描述
我刚刚继承了一个 2013 年创建的旧项目。
Keystore 可能是用 jdk 7 创建的。
当我尝试在 Android Studio 中生成 APK 时,抛出异常:
无法加载密钥存储:无法初始化,java.io.IOException:DerInputStream.getLength():发现冗余长度字节
我尝试的是:
- 将密钥库转换为 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/