执行keytool命令报java.io.IOException: Invalid keystore format错误
keytool读取安卓debug.keystore抛出
Invalid keystore formatIOException 问题描述
执行如下命令获取debug签名证书信息时抛出异常:
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%.android\debug.keystore
完整错误栈:
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:941) at sun.security.tools.keytool.Main.run(Main.java:379) at sun.security.tools.keytool.Main.main(Main.java:372)
已尝试公开渠道常见解决方案均未解决,需要可落地的排查与解决路径。
排查与解决步骤
- 先修正命令路径错误
原命令中%USERPROFILE%和.android之间缺失路径分隔符\,会导致命令实际查找的路径为C:\Users\<当前用户名>.android\debug.keystore而非正确的子目录路径,先将命令修正为:
修正后如果仍报错,继续往下排查。keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore - 校验keystore文件完整性
手动打开C:\Users\<当前用户名>\.android\目录,检查debug.keystore文件大小:如果文件大小为0KB,说明文件已损坏,直接删除该文件以及同目录下的debug.keystore.lock文件,重启Android Studio后执行一次debug包编译,IDE会自动生成全新的合法debug签名文件,默认签名密码为android。 - 对齐keytool所属JDK版本
不同版本JDK默认支持的keystore格式存在差异:JDK 8及更早版本默认使用JKS格式,JDK 17及更新版本默认使用PKCS12格式,跨版本调用keytool读取keystore时会出现格式识别失败问题。
排查操作:- 终端执行
keytool -version,确认当前调用的keytool所属JDK版本 - 打开Android Studio,进入
Settings > Build, Execution, Deployment > Build Tools > Gradle,查看Gradle JDK配置的版本 - 如果两个版本不一致,直接使用Android Studio自带JDK路径下的keytool执行命令即可,Windows下自带JDK的默认路径为
C:\Program Files\Android\Android Studio\jbr\bin\keytool.exe,调用时写全路径即可避免版本混用问题。
- 终端执行
- 强制指定keystore格式读取
keytool自动识别格式失败也会抛出该错误,可以在命令中显式指定存储类型和密码,分别尝试两种格式:- 按JKS格式读取:
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storetype JKS -storepass android- 按PKCS12格式读取:
其中某条命令如果能正常返回证书信息,后续读取时加上对应keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storetype PKCS12 -storepass android-storetype参数即可。 - 排查权限与文件占用问题
右键点击debug.keystore文件,打开「属性-安全」面板,确认当前Windows登录账号对该文件有读取权限,无权限则手动添加。如果Android Studio、Gradle守护进程正在占用该文件,也会导致读取校验失败,可先关闭Android Studio,执行taskkill /f /im java.exe结束所有Java进程后再重试命令。 - 兜底方案
以上操作都无效时,直接删除.android目录下的debug.keystore和debug.keystore.lock文件,重启Android Studio执行一次debug构建即可自动生成新的签名文件。注意新签名生成后,之前用旧debug签名安装的应用需要先卸载才能重新安装,否则会因签名不一致安装失败。
内容的提问来源于stack exchange,提问作者AK 1000
相关产品推荐
相关产品推荐

