Jenkins装OpenJDK17后APK签名失败,切回OpenJDK11仍无效求助
Jenkins Android签名插件切换JDK后仍报错的求助
问题详情
在Jenkins上安装OpenJDK17后,使用Android Signing插件签名APK时出现以下错误:
10:59:59 FATAL: class com.android.apksig.internal.apk.v1.V1SchemeSigner (in unnamed module @0x38dba2ff) cannot access class sun.security.x509.AlgorithmId (in module java.base) because module java.base does not export sun.security.x509 to unnamed module @0x38dba2ff 10:59:59 java.lang.IllegalAccessError: class com.android.apksig.internal.apk.v1.V1SchemeSigner (in unnamed module @0x38dba2ff) cannot access class sun.security.x509.AlgorithmId (in module java.base) because module java.base does not export sun.security.x509 to unnamed module @0x38dba2ff 10:59:59 at com.android.apksig.internal.apk.v1.V1SchemeSigner.getSupportedAlgorithmId(V1SchemeSigner.java:625) 10:59:59 at com.android.apksig.internal.apk.v1.V1SchemeSigner.<clinit>(V1SchemeSigner.java:541) 10:59:59 at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:149) 10:59:59 at com.android.apksig.DefaultApkSignerEngine.<init>(DefaultApkSignerEngine.java:52) 10:59:59 at com.android.apksig.DefaultApkSignerEngine$Builder.build(DefaultApkSignerEngine.java:902) 10:59:59 at com.android.apksig.ApkSigner.sign(ApkSigner.java:260) 10:59:59 at com.android.apksig.ApkSigner.sign(ApkSigner.java:179) 10:59:59 at org.jenkinsci.plugins.androidsigning.SignApksBuilder$SignApkCallable.invoke(SignApksBuilder.java:510) 10:59:59 at org.jenkinsci.plugins.androidsigning.SignApksBuilder$SignApkCallable.invoke(SignApksBuilder.java:464) 10:59:59 at hudson.FilePath.act(FilePath.java:1198) 10:59:59 at hudson.FilePath.act(FilePath.java:1181) 10:59:59 at org.jenkinsci.plugins.androidsigning.SignApksBuilder.perform(SignApksBuilder.java:359) 10:59:59 at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123) 10:59:59 at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:80) 10:59:59 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 10:59:59 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818) 10:59:59 at hudson.model.Build$BuildExecution.build(Build.java:199) 10:59:59 at hudson.model.Build$BuildExecution.doRun(Build.java:164) 10:59:59 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526) 10:59:59 at hudson.model.Run.execute(Run.java:1900) 10:59:59 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44) 10:59:59 at hudson.model.ResourceController.execute(ResourceController.java:101) 10:59:59 at hudson.model.Executor.run(Executor.java:442)
已尝试的操作
此前使用OpenJDK11时签名正常,因此将流水线切换回OpenJDK11:
- 在签名步骤前添加构建步骤执行
java --version,输出确认当前环境为OpenJDK11:
10:59:59 + java --version 10:59:59 openjdk 11.0.18 2023-01-17 10:59:59 OpenJDK Runtime Environment (build 11.0.18+10-post-Debian-1deb11u1) 10:59:59 OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Debian-1deb11u1, mixed mode, sharing)
- 使用
update-alternatives --config java切换系统默认JDK至OpenJDK11,但问题仍然存在。
解决建议
- 检查Jenkins全局JDK配置:进入Jenkins「全局工具配置」,确认OpenJDK11已正确添加并设置为默认,同时确保签名步骤明确指定使用该JDK(构建步骤的shell环境JDK和插件使用的JDK可能不是同一个)
- 更新Android Signing插件:旧版本插件可能存在JDK兼容性问题,更新至最新版后重试
- 若需继续使用OpenJDK17:在Jenkins的JVM启动参数中添加
--add-exports=java.base/sun.security.x509=ALL-UNNAMED,解除模块访问限制 - 清理构建缓存与重启Jenkins:清理工作空间缓存,或重启Jenkins服务,避免旧JDK依赖残留
- 检查代理节点配置:如果使用Jenkins代理节点构建,需确保代理节点的JDK版本为11,且工具配置与主节点一致
内容的提问来源于stack exchange,提问作者kev4020
相关产品推荐
相关产品推荐

