Android项目Gradle构建失败:Dex转换错误(重复类定义)
解决Android Gradle构建报错:Multiple dex files define Landroid/arch/core/internal/SafeIterableMap$Entry;
嘿,这个问题我之前踩过坑!你遇到的是重复依赖导致的Dex打包冲突——简单说就是android.arch.core.internal.SafeIterableMap$Entry这个类被多个不同的依赖库同时引入了,Dex编译器不知道该用哪一个,所以直接报错罢工了。下面是我亲测有效的解决步骤:
第一步:定位重复依赖的来源
先搞清楚到底是哪些库在重复引入这个类。打开终端,在项目根目录运行以下命令:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew app:dependencies
在输出的依赖树里搜索SafeIterableMap,你会看到哪些库依赖了这个类,重点看有没有版本不一致或者重复引入的情况。
第二步:针对性解决冲突
根据定位到的情况,选对应的方案:
方案1:排除重复的依赖模块
如果发现某个第三方库自带了旧版本的android.arch.core:runtime(就是包含这个类的库),直接在依赖声明里排除它:
implementation('com.example:problem-library:1.2.3') { exclude group: 'android.arch.core', module: 'runtime' }
方案2:统一架构组件的版本
如果你在使用Android Architecture Components(比如Lifecycle、ViewModel这些),一定要确保所有相关依赖的版本完全一致,版本不一致很容易导致类重复。可以在build.gradle里统一配置版本变量:
ext { arch_components_version = '1.1.1' // 选一个稳定的最新版本 } implementation "android.arch.core:runtime:$arch_components_version" implementation "android.arch.lifecycle:extensions:$arch_components_version" implementation "android.arch.lifecycle:viewmodel:$arch_components_version"
方案3:检查MultiDex配置(针对方法数超65k的项目)
如果你的项目方法数超过了65536,必须启用MultiDex,但配置不当也会引发这类冲突。确认你的配置:
android { defaultConfig { multiDexEnabled true } } implementation 'com.android.support:multidex:1.0.3'
然后在自定义的Application类里:
public class MyApp extends MultiDexApplication { // ... 其他代码 }
如果不能继承MultiDexApplication,就在attachBaseContext里添加:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
方案4:清理构建缓存
有时候旧的构建缓存会残留冲突文件,试试彻底清理后重新构建:
- 在Android Studio里点击
Build -> Clean Project,然后Build -> Rebuild Project - 或者终端运行:
./gradlew clean build
如果以上方法都没解决,把你的app模块build.gradle里的依赖部分贴出来,大家可以帮你精准定位冲突源~
内容的提问来源于stack exchange,提问作者mdadil2019
相关产品推荐
相关产品推荐

