如何解决Android编译报错:Unable to merge dex
解决Android编译时的DexArchiveMergerException错误
你在编译Android应用时碰到了这个棘手的报错:
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
而且已经在app.build里开启了multiDexEnabled true但问题依然存在,你的app.build配置如下:
apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.rutunjay.retrofit_example" minSdkVersion 21 targetSdkVersion 27 versionCode 1 versionName "1.0" multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { testImplementation 'junit:junit:4.12' compile 'android.arch.lifecycle:runtime:1.0.0-alpha1' compile 'android.arch.lifecycle:extensions:1.0.0-alpha1' annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha1" }
别担心,除了开启MultiDex,还有几个实用的方法可以解决这个问题:
1. 清理并重建项目
先从最基础的操作入手,很多时候只是缓存堆积导致的问题:
- 点击Android Studio菜单栏的
Build->Clean Project - 完成后再点击
Build->Rebuild Project
等待重建完成后,再尝试编译看看是否解决。
2. 排查依赖冲突
Dex合并失败最常见的原因就是依赖库版本冲突。你可以这样排查:
- 打开Android Studio的
Terminal,运行命令:
(Mac/Linux)./gradlew app:dependencies
(Windows)gradlew app:dependencies - 查看输出的依赖树,重点找是否有重复引入的库(比如不同版本的support库、lifecycle相关库)
- 如果发现冲突,在
dependencies块中强制指定统一版本,示例:configurations.all { resolutionStrategy.force 'android.arch.lifecycle:runtime:1.0.0-alpha1' }
虽然你的lifecycle依赖版本一致,但可能存在其他隐式依赖的冲突,仔细排查下。
3. 手动添加MultiDex依赖
虽然你的minSdkVersion是21(系统原生支持MultiDex),但有时候还是需要手动引入依赖包来确保兼容性:
在dependencies中添加:
implementation 'com.android.support:multidex:1.0.3'
然后确保你的Application类正确初始化MultiDex:
- 如果你的Application类继承自
Application,在onCreate方法中添加:@Override protected void onCreate(Bundle savedInstanceState) { MultiDex.install(this); super.onCreate(savedInstanceState); } - 或者直接让你的Application类继承
MultiDexApplication。
4. 关闭Instant Run
Instant Run的热替换机制有时候会干扰Dex合并,你可以尝试关闭它:
- 打开
File->Settings(Windows/Linux)或Android Studio->Preferences(Mac) - 找到
Build, Execution, Deployment->Instant Run - 取消勾选
Enable Instant Run to hot swap code/resource changes on deploy
5. 确认Java版本配置
你的compileOptions已经设置了Java 8,还要确保Android Studio的JDK配置也是Java 8:
- 打开
File->Project Structure->SDK Location - 检查
JDK location是否指向Java 8的安装目录
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

