Android Gradle构建失败:Dexing错误与Java版本兼容问题求助
Android Dexing错误排查与解决
一、排查依赖是否使用Java 8
- 用Gradle命令扫描依赖树:
在终端执行./gradlew app:dependencies --configuration ciDebugRuntimeClasspath,定位到mypkg:mylib:1.0.0的依赖链,检查是否有依赖明确声明采用Java 8编译。 - 查看jar包字节码版本:
找到报错中的jar路径/Users/xxx/.gradle/caches/transforms-3/49baf52f7ba8b21fe69d66f95b8d5255/transformed/jetified-mylib-1.0.0-runtime.jar,执行javap -v -classpath 上述路径 jar内任意类名(比如javap -v -classpath /xxx/jetified-mylib-1.0.0-runtime.jar com.mypkg.MyClass)。如果输出里major version为52,说明该jar是Java 8编译的(Java 11对应版本号为55)。 - 检查依赖的POM配置:
若是远程仓库依赖,查找其POM文件,确认是否存在<maven.compiler.source>8</maven.compiler.source>或<maven.compiler.target>8</maven.compiler.target>这类配置;若是本地aar,查看其打包时的build.gradle编译配置。
二、解决办法
- 强制开启核心库脱糖:
即便已设置Java 11,部分旧依赖仍需显式开启脱糖功能。在app模块的build.gradle中添加以下配置:android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 coreLibraryDesugaringEnabled true } kotlinOptions { jvmTarget = "11" } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' } - 同步依赖的编译版本:
如果mylib是自研维护的库,将其compileOptions也设置为Java 11,重新打包发布后再引入项目。 - 调整Dexing参数:
在build.gradle中添加Dex相关配置,强制使用新Dexer并加大堆内存:android { dexOptions { preDexLibraries = false dexInProcess = true javaMaxHeapSize "4g" } } - 清理缓存重新构建:
先执行./gradlew clean,再删除.gradle/caches目录下的相关缓存文件,最后重新执行构建命令。
内容的提问来源于stack exchange,提问作者rysv
相关产品推荐
相关产品推荐

