Open KeepDreamHCQ opened 7 months ago
推测是签名配置信息有误,然后签名失败了,程序没有正确处理这种异常。
建议
尝试新版本,处理了这个错误,并且可查看出错信息:运行源代码或者下载临时安装包https://f.ws28.cn/f/dku2o013c0l 复制链接到浏览器打开,有效期24小时
检查一下签名信息:可以在【签名信息】-> 【重新选择签名】-> 【编辑按钮】查看修改已有签名
包再给个链接呗,过期了
试了一下 -》 检查一下签名信息:可以在【签名信息】-> 【重新选择签名】-> 【编辑按钮】查看修改已有签名 没有效果,还是这个错误
包再给个链接呗,过期了
可以在这里下载新的测试包:https://github.com/jixiaoyong/ApkSigner/releases/tag/v1.1.3-20240311104223-alpha
这个包处理了这个错误,并且可查看出错信息,可以把错误信息贴上来方便定位问题。
Failed to load signer "signer #1"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 com.android.apksigner.ApkSignerTool$SignerParams.loadKeyStoreFromFile(ApkSignerTool.java:833) at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCertsFromKeyStore(ApkSignerTool.java:723) at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCerts(ApkSignerTool.java:663) at com.android.apksigner.ApkSignerTool$SignerParams.access$500(ApkSignerTool.java:615) at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:269) at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89)
请问签名失败的这个签名文件,是什么格式的,用什么命令创建的,你在设置里面使用的build-tools版本是多少?
查了一些资料,这个错误好像是签名文件和android sdk/build-tools中的apksigner版本或者java版本不匹配导致的。
建议查看一下出错的签名对应的项目中用的java版本和buildToolsVersion,然后切换到对应的版本再试一下。 或者方便的话可以用同样方式生成一个临时签名发出来我这边定位一下问题
这个是ApkSigner默认的签名命令,供参考:
build-tools/34.0.0/apksigner sign -v --ks 222 --ks-key-alias 22 --key-pass pass:2222 --ks-pass pass:22 --v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true --v4-signing-enabled true --out /Users/xxx/dev/temp/com.xxx.com_signed_signed_signed.apk /Users/xxx/dev/temp/com.xxx.com_signed_signed.apk
参考资料: https://www.jianshu.com/p/7b5e2919f50a https://stackoverflow.com/questions/1052700/java-io-ioexception-invalid-keystore-format https://knowledge.broadcom.com/external/article/218825/keytool-command-returns-invalid-keytore.html
我是通过Android Studio的Build -> Generate Signed Bundle -> APK -> Create new... 生成的签名文件,build-tools版本28.0.3,我生成了一个test的签名文件,也会报错,我提供给你。签名密码:test123、别名:test test.jks.zip
我使用你的签名文件, 然后分别尝试了:
建议在ApkSigner的【设置信息】处修改你使用的build-tools版本后再次尝试签名。
签名信息:
keytool -printcert -jarfile /Users/xxx/dev/temp/xxx_signed_signed.apk
Signer #1:
Certificate #1:
Owner: L=xx
Issuer: L=xx
Serial number: 37780402
Valid from: Tue Mar 12 10:59:37 CST 2024 until: Sat Mar 06 10:59:37 CST 2049
Certificate fingerprints:
SHA1: 23:12:A5:75:AB:E7:28:BC:67:B1:44:23:0D:95:5E:08:C2:02:6D:3F
SHA256: A8:03:3A:CE:1C:63:DB:89:0A:35:3D:D0:DB:EA:9B:00:47:6F:2C:F9:C9:4F:06:B5:03:2B:FE:5E:67:57:84:39
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
...
诶?我现在测试的时候配置的配置信息就是build-tools版本30.0.3的情况下,还是会报错。
我这边使用上述签名没有复现“java.io.IOException: Invalid keystore format”这个问题,所以只能猜想,如果我们的build-tools版本一致的话,会不会是java版本有差异?
比如android studio创建签名文件的java版本和执行签名时的java环境版本有差异。
我刚刚分别在macOS和windows上面测试了v1.1.3-20240311104223-alpha,按照如下的配置:
其中windows上java版本为:
PS C:\Windows\System32> java -version
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
macOS上java版本为:
java --version
openjdk 11.0.22 2024-01-16 LTS
OpenJDK Runtime Environment Corretto-11.0.22.7.1 (build 11.0.22+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.22.7.1 (build 11.0.22+7-LTS, mixed mode)
对于build-tools版本为30.0.3可以签名成功。
“java.io.IOException: Invalid keystore format”一些可能的解决方案:
系统类型
Windows
系统版本
window
软件版本
1.1.2
问题描述
签名key和build-tools都配置好了,点击签名的时候报错 ![Uploading 73F6D9AD3A43032155383030EDD41CBF.png…]()
复现步骤
1. 2. 3.