构建签名APK报Could not resolve all artifacts错误解决方法
问题根因
- 核心触发点是
Unsupported class file major version 59报错:class文件主版本号59对应Java 15编译的字节码,当前项目使用的Jetifier版本不支持该版本字节码转换,处理org.bouncycastle:bcprov-jdk15on:1.68依赖时JetifyTransform直接抛出异常,连带导致:image_picker_android:debugUnitTestRuntimeClasspath依赖解析失败、:app:lintVitalRelease任务执行中断。 - debug运行正常的原因是debug构建默认不会触发release专属的全量lint vital检查,也不会执行全量依赖的Jetifier转换流程,问题仅在打签名release包时暴露。
解决步骤
优先方案:升级构建工具链(长期稳定解法)
低版本AGP(Android Gradle Plugin)和Gradle自带的Jetifier最高仅支持到Java 11的字节码处理,升级到对应兼容版本即可直接解决问题:
- 打开根目录下
gradle/wrapper/gradle-wrapper.properties文件,修改Gradle版本为7.0及以上,示例配置:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
- 打开根目录下项目级
build.gradle文件,修改AGP版本为7.0及以上,和上述Gradle版本匹配,示例配置:
buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.2.2' // 其他原有classpath依赖保留 } }
- 打开
gradle.properties文件,确认Jetifier相关配置正确,不要手动指定低版本Jetifier依赖:
android.useAndroidX=true android.enableJetifier=true
同步Gradle后重新执行签名APK构建即可,7.0及以上版本AGP自带的Jetifier已支持Java 15及以上字节码转换,不会再出现该异常。
兼容方案:强制降级bcprov依赖(无法升级构建工具时使用)
如果项目存在兼容约束不能升级AGP和Gradle,可直接在app模块的build.gradle中添加依赖强制规则,将bcprov-jdk15on版本降到使用Java 11编译的1.65版本,避开Jetifier不兼容的1.68版本:
android { // 模块原有配置保留 } configurations.all { resolutionStrategy { force 'org.bouncycastle:bcprov-jdk15on:1.65' } }
配置完成后同步Gradle即可正常构建。
临时规避方案(仅应急打包使用)
如果处理完Jetifier问题后,仍因lint检查导致构建中断,可在app模块build.gradle的release构建类型中添加配置,临时跳过release阶段的lint检查:
android { buildTypes { release { // 原有签名、混淆、压缩配置保留 lintOptions { checkReleaseBuilds false abortOnError false } } } }
注意:该方案仅作应急使用,正式发版前需修复lint抛出的真实问题,不建议长期关闭release lint检查。
内容的提问来源于stack exchange,提问作者PAPPURAJ BHOTTACHARJEE
相关产品推荐
相关产品推荐

