You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:09:45