遇到Unable to merge dex错误,开启multiDex后仍未解决
解决Android DexArchiveMergerException(已开启MultiDex仍报错)
我碰到过好多次这种情况——明明已经开了multiDexEnabled true也加了multidex依赖,还是栽在dex合并的坑里。试试下面这些排查和解决方法,大概率能搞定:
先做最基础的清理重建
很多时候是缓存搞的鬼,先彻底清一遍:- 点击Android Studio顶部菜单栏的
Build -> Clean Project - 接着点
Build -> Rebuild Project
或者用命令行执行:
./gradlew clean assembleDebug- 点击Android Studio顶部菜单栏的
检查重复依赖冲突
这是最常见的原因——多个库引入了相同的类,导致合并时冲突。
用命令行查看项目的依赖树:./gradlew app:dependencies仔细找有没有重复的依赖(比如不同版本的support库、同一个第三方库被多次引入),找到后在对应的依赖里排除重复项。举个例子,如果发现两个版本的
support-v4,可以这么写:implementation 'com.example.somelibrary:1.0.0' { exclude group: 'com.android.support', module: 'support-v4' }升级Gradle工具链
旧版本的Gradle插件或Build Tools可能存在dex合并的bug,建议升级到稳定的新版本:- 在项目根目录的
build.gradle里,更新gradle插件版本:buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 换成最新稳定版 } } - 同步后,把
app/build.gradle里的compileSdkVersion和buildToolsVersion也升级到对应兼容的版本。
- 在项目根目录的
完善MultiDex配置(针对minSdk<21的情况)
如果你的minSdkVersion低于21,只开multiDexEnabled true还不够,需要额外配置:- 自定义Application类(如果还没有的话),在
attachBaseContext里调用MultiDex.install():public class MyApp extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } - 在
AndroidManifest.xml的application标签里指定这个自定义类:<application android:name=".MyApp" ...> ... </application>
- 自定义Application类(如果还没有的话),在
关闭Instant Run
Instant Run有时候会干扰dex合并流程,尝试关闭它:
点击File -> Settings -> Build, Execution, Deployment -> Instant Run,取消勾选Enable Instant Run to hot swap code/resource changes on deploy。增加构建内存
如果是构建时内存不足导致的失败,在项目根目录的gradle.properties里添加内存配置:org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

