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

Android多模块项目构建报错:重复类及Dex转换失败求助

Android多模块项目构建错误解决方案

1. 解决:app:mergeExtDexDebugAndroidTest任务失败(ddmlib Dex转换错误)

方案一:排除测试依赖中的高版本ddmlib

在app模块的build.gradle.kts中,定位引入ddmlib的AndroidTest依赖并排除该模块:

androidTestImplementation("androidx.test.ext:junit:1.1.5") {
    exclude(group = "com.android.tools.ddms", module = "ddmlib")
}
// 其他包含ddmlib的测试依赖需做同样处理

若不确定依赖来源,执行以下命令查看测试依赖树:

./gradlew app:dependencies --configuration debugAndroidTestCompileClasspath

方案二:启用Core Library Desugaring(无需提升minSdk)

在app模块的build.gradle.kts中配置desugar,让低版本SDK兼容高版本库特性:

android {
    compileOptions {
        coreLibraryDesugaringEnabled = true
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    testOptions {
        androidTest {
            compileOptions {
                coreLibraryDesugaringEnabled = true
            }
        }
    }
}

dependencies {
    coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
}

2. 解决protobuf重复资源与重复类问题

方案一:统一使用protobuf-javalite,排除protobuf-java依赖

在所有模块的build.gradle.kts中,对引入protobuf的依赖做排除处理,强制使用javalite版本:

// 示例:排除第三方依赖中的protobuf-java
implementation("some.library:that-uses-protobuf:1.0.0") {
    exclude(group = "com.google.protobuf", module = "protobuf-java")
}

// 统一引入指定版本的javalite
implementation("com.google.protobuf:protobuf-javalite:3.21.7")

方案二:在项目根目录settings.gradle.kts中强制统一protobuf版本

添加版本约束,确保所有模块使用相同的protobuf版本:

dependencyResolutionManagement {
    constraints {
        all {
            if (group == "com.google.protobuf") {
                version { strictly("3.21.7") }
            }
        }
    }
}

方案三:配置protobuf插件生成javalite代码

若使用protobuf Gradle插件,在模块build.gradle.kts中指定生成javalite类型的代码:

plugins {
    id("com.google.protobuf") version "0.9.4"
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.21.7"
    }
    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                remove("java")
                create("javatite")
            }
        }
    }
}

3. 验证修复效果

执行以下命令清理并重新构建项目:

./gradlew clean
./gradlew assembleDebugAndroidTest
./gradlew assembleDebug

内容的提问来源于stack exchange,提问作者zadgee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:30:06