求助解决DexArchiveMergerException:无法合并dex(附Gradle配置)
解决com.android.builder.dexing.DexArchiveMergerException: 无法合并dex的问题
兄弟,这个Dex合并报错我简直太熟了,几乎每个Android开发者都踩过这个坑。结合你给出的Gradle配置,给你几个针对性的解决方案,按顺序试,大概率能解决:
1. 先揪出依赖冲突(最常见的元凶)
Dex合并失败90%都是因为重复依赖或者版本不一致的库,尤其是Android Support库。你用了compileSdkVersion 27,所有support相关的库版本必须统一成27.x.x的稳定版,不然很容易冲突。
- 先执行命令生成依赖树,看看哪里出问题:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew.bat app:dependencies - 找出版本不统一的库(比如ButterKnife可能偷偷引入了高版本的support库),然后在
android块下面添加强制统一版本的配置:configurations.all { resolutionStrategy { // 把这里的版本换成你项目里用的27.x.x版本 force 'com.android.support:appcompat-v7:27.1.1' force 'com.android.support:support-v4:27.1.1' force 'com.android.support:design:27.1.1' // 其他冲突的support库都可以加在这里 } }
2. 彻底清理缓存重建项目
有时候AS的缓存会抽风,导致奇奇怪怪的编译错误,先清干净再说:
- 点击Android Studio顶部菜单栏的
Build > Clean Project - 然后点击
Build > Rebuild Project - 如果还是不行,手动删除项目根目录下的
.gradle文件夹和app/build文件夹,重启AS再重新编译
3. 补全MultiDex的完整配置
你已经开了multiDexEnabled true,但还需要两步才能让MultiDex完全生效:
- 在
dependencies块里添加MultiDex的依赖:implementation 'com.android.support:multidex:1.0.3' - 调整你的Application类:
- 如果你的Application是继承自
Application,改成继承MultiDexApplication; - 如果没法改父类,就在
attachBaseContext方法里初始化MultiDex:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 如果你的Application是继承自
4. 换掉不稳定的Build Tools版本
你用的buildToolsVersion '28.0.0-rc1'是候选版本,兼容性很差,换成和compileSdkVersion 27匹配的稳定版:
buildToolsVersion '27.0.3'
5. 检查是否有重复引入的依赖
比如有些库你既加了jar包又加了implementation依赖,或者重复声明了同一个库。仔细检查你的dependencies块,把重复的依赖删掉。
如果试完这些还是不行,把你的完整dependencies块和buildType配置贴出来,我再帮你排查细节。
内容的提问来源于stack exchange,提问作者Iman Marashi
相关产品推荐
相关产品推荐

