Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] window系统上签名报错null cannot be cast to non-null type <root>.CommandResult,Success<*> #8

Open
KeepDreamHCQ opened this issue Mar 8, 2024 · 11 comments
Labels
bug Something isn't working

Comments

@KeepDreamHCQ
Copy link

系统类型

Windows

系统版本

window

软件版本

1.1.2

问题描述

签名key和build-tools都配置好了,点击签名的时候报错
Uploading 73F6D9AD3A43032155383030EDD41CBF.png…

复现步骤

@KeepDreamHCQ KeepDreamHCQ added the bug Something isn't working label Mar 8, 2024
@KeepDreamHCQ
Copy link
Author

73F6D9AD3A43032155383030EDD41CBF

@KeepDreamHCQ KeepDreamHCQ changed the title [BUG] window系统上加固报错null cannot be cast to non-null type <root>.CommandResult,Success<*> [BUG] window系统上签名报错null cannot be cast to non-null type <root>.CommandResult,Success<*> Mar 8, 2024
@jixiaoyong
Copy link
Owner

推测是签名配置信息有误,然后签名失败了,程序没有正确处理这种异常。

建议

  • 尝试新版本,处理了这个错误,并且可查看出错信息:运行源代码或者下载临时安装包https://f.ws28.cn/f/dku2o013c0l 复制链接到浏览器打开,有效期24小时
    image

  • 检查一下签名信息:可以在【签名信息】-> 【重新选择签名】-> 【编辑按钮】查看修改已有签名

@KeepDreamHCQ
Copy link
Author

包再给个链接呗,过期了

@KeepDreamHCQ
Copy link
Author

试了一下 -》 检查一下签名信息:可以在【签名信息】-> 【重新选择签名】-> 【编辑按钮】查看修改已有签名
没有效果,还是这个错误

@jixiaoyong
Copy link
Owner

包再给个链接呗,过期了

可以在这里下载新的测试包:https://github.com/jixiaoyong/ApkSigner/releases/tag/v1.1.3-20240311104223-alpha

这个包处理了这个错误,并且可查看出错信息,可以把错误信息贴上来方便定位问题。

@KeepDreamHCQ
Copy link
Author

我试了三个签名,其中有一个签名会报错。在正常项目使用中是没有问题的,配置的签名信息都是正确的。
错误信息:

[1] H:\Desktop\x.apk

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)

@jixiaoyong
Copy link
Owner

请问签名失败的这个签名文件,是什么格式的,用什么命令创建的,你在设置里面使用的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

@KeepDreamHCQ
Copy link
Author

我是通过Android Studio的Build -> Generate Signed Bundle -> APK -> Create new... 生成的签名文件,build-tools版本28.0.3,我生成了一个test的签名文件,也会报错,我提供给你。签名密码:test123、别名:test
test.jks.zip

@jixiaoyong
Copy link
Owner

我使用你的签名文件, 然后分别尝试了:

  • build-tools 28.0.3 出错 Unsupported option: --v3-signing-enabled. See --help for supported options.
  • build-tools 30.0.3,34.0.0 签名成功

建议在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

...

@KeepDreamHCQ
Copy link
Author

诶?我现在测试的时候配置的配置信息就是build-tools版本30.0.3的情况下,还是会报错。
E5940BD251238505AB5E2DBE85D01F17
62C3943E5665BD84A89419CC861116E4

@jixiaoyong
Copy link
Owner

我这边使用上述签名没有复现“java.io.IOException: Invalid keystore format”这个问题,所以只能猜想,如果我们的build-tools版本一致的话,会不会是java版本有差异?

比如android studio创建签名文件的java版本和执行签名时的java环境版本有差异。

我刚刚分别在macOS和windows上面测试了v1.1.3-20240311104223-alpha,按照如下的配置:
WXWorkCapture_17102260065970

WXWorkCapture_17102245155859
WXWorkCapture_17102245271151

其中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”一些可能的解决方案:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants