likes
comments
collection
share

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

作者站长头像
站长
· 阅读数 14

前言:

最近打算做一款项目,需要调用一些大公司API(高德地图或百度地图),发现在获取安全码时发生了java.io.IOException: Invalid keystore format错误,那如何解决这种错误呢?在忙了俩小时之后,发现有一种方法可以解决。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

打开Android studio :

打开android studio后,点击右上角的File选项选择Project Structure...

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 打开后点击SDK Location,下方有个蓝色选项Gradle Setting,点击打开。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 点开Gradle JDK,就会发现,如果你之前没配置过JDK,使用的是android studio自带的版本,就可能会出现和自己主机上安装的JDK版本不相同的情况。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 JDK是什么?JDK 是 Java Development ToolKit 的简称,也就是 Java 开发工具包。其中包含了编译器、调试器、运行时环境、类库以及其他实用工具,用于开发、编译、调试和运行 Java 程序。它提供了一些重要的组件,例如 Java 编译器(javac)、Java 虚拟机(JVM)和 Java 类库(Java Class Library)等。大体来说,JDK 是用于 Java 开发的一套工具和资源集合,使开发人员能够编写、编译、调试和运行 Java 程序

寻找目录

我们找到android默认的JDK存放路径,如图(我的存放路径是D:\program\android\Androidstudio\jbr\bin)

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 用文件夹打开,在文件夹路径上打出cmd,回车进入

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 于是我们进入了该目录行下的命令操作界面,我们在这个操作界面就可以获取SHA1

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

获取开发版SHA1安全码

我们打开c盘的用户(User)文件,打开名字为123456文件(一串数字罢了)后打开.android文件,找到debug.keystore,这个就是秘钥库。通过命令可以获得安全码。复制秘钥库所在的路径。(我为了省事这样,也可以通过命令行输入命令cd进入)

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 在刚才的命令行操作界面输入:keytool -v -list -keystore debug.keystore,默认密码为android

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 这样就获得了开发版的SHA1安全码。

获取发布版SHA1安全码

打开Android studio,如下面图操作,跟上节奏

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 点击OK,再把下面的也设置了,推荐你们把所有密码都写一样的,不然分不清。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 创建完后我们存放的路径会有一个jks文件。JKS 文件是一种 Java 密钥存储文件,用于在 Java 程序中管理和存储密钥、证书和可信任的证书颁发机构(CA)根证书。在 Java 程序中,可以使用密钥库(KeyStore)类来加载和操作 JKS 文件。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案 然后我们回到刚刚的命令行操作界面,输入: keytool -v -list -keystore + 路径 + 文件名和后缀,填写你刚刚创建的密码就可以了。

Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误解决方案

大功告成,问题完美解决

错误原因分析:

这可能是由于使用不同版本的密钥库格式或不兼容的工具导致的,Java中的 keytool 工具用于处理密钥库,包括创建、导入、导出、查看证书等操作。然而不同版本的 JDK / JRE 可能使用不同的默认密钥库格式。例如,较旧的版本可能使用 JKS (Java KeyStore) 格式,而较新的版本可能更倾向于使用 PKCS12 格式。两种格式在内部结构和文件编码上存在差异。

解决这种问题,可以把主机的JDK版本更新一下,这样就有相应版本的keytool工具。或者就是像我这样,使用android默认的JDK,也就是和它兼容的版本,就可以打开了。

补充说明:

导致Android申请安全码SHA1遇到的java.io.IOException: Invalid keystore format错误的原因不止一种,而我今天解决的是其中一种的原因。如果按我上述操作还没有成功解决的小伙伴,可以去看看其他博主写的文章。