java.io.IOException:密钥存储格式无效/无法识别的密钥存储格式.当使用旧的android密钥库时,请使



我试图用Android Studio 4.0.1签署一个旧的Android应用程序(我在一年前成功签署了它(,但密钥库似乎无法再打开了。我仔细检查了证件,但我不认为是因为这个原因。我还用";无效的密钥存储格式";在互联网上,但在这里没有运气。

android JRE引发此错误:

$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/bin/keytool -list -keystore android.keystore -v
erreur keytool : java.io.IOException: Invalid keystore format
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:663)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
at java.security.KeyStore.load(KeyStore.java:1445)
at sun.security.tools.keytool.Main.doCommands(Main.java:823)
at sun.security.tools.keytool.Main.run(Main.java:366)
at sun.security.tools.keytool.Main.main(Main.java:359)
$ /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/bin/java -version
openjdk version "1.8.0_242-release"
OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
OpenJDK 64-Bit Server VM (build 25.242-b3-6222593, mixed mode)

这与操作系统完全相同:

$ keytool -list -keystore android.keystore -v
keytool error: java.security.KeyStoreException: Unrecognized keystore format. Please load it with a specified type
java.security.KeyStoreException: Unrecognized keystore format. Please load it with a specified type
at java.base/java.security.KeyStore.getInstance(KeyStore.java:1809)
at java.base/java.security.KeyStore.getInstance(KeyStore.java:1680)
at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:936)
at java.base/sun.security.tools.keytool.Main.run(Main.java:417)
at java.base/sun.security.tools.keytool.Main.main(Main.java:410)
$ java --version
openjdk 14.0.2 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-46)
OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

我想我以前已经遇到过这个问题,必须恢复到JRE的旧版本才能继续正确打开密钥库(我目前正在尝试的解决方案(。

  • 这是不同版本之间更改的默认算法的问题吗?如果是,我如何检查我的密钥库是否仍然有效,以及我是否使用了正确的算法(因为我没有创建它(
  • 我是否需要以某种方式迁移密钥库

在我的案例中,我通过删除现有路径中的现有.jks文件找到了解决方案。

选择要导出的新路径或删除。在删除之前,我建议进行备份。

这是由于JDK版本不匹配造成的。如果Android studio配置为使用嵌入式JDK,请尝试使用该嵌入式JDK中的keytool

例如

/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/keytool -list -v -keystore ...

我想我过去已经遇到过这个问题,必须恢复到JRE的旧版本才能继续正确打开密钥库(我目前正在尝试的解决方案(。