Android Studio出现Unable to merge dex错误,求有效解决方法
解决Android Studio中「Unable to merge dex」问题(Parse LiveQuery依赖引入后)
我之前在引入Parse相关依赖时也踩过这个Dex合并的坑,结合你的情况,已经试过clean、rebuild和开启multidex还没解决,大概率是依赖版本冲突导致的——尤其是你最后加的com.github.tgio:parse-livequery:1.0.3,很可能和你现有依赖里的Parse或者Support库版本不一致,造成重复类打包。
给你几个针对性的解决步骤:
1. 先排查依赖冲突
首先用Gradle命令查看完整的依赖树,找出重复或版本不一致的库:
- 如果你是Mac/Linux,在项目根目录终端执行:
./gradlew app:dependencies - Windows用户执行:
gradlew.bat app:dependencies
重点看parse-android和Android Support相关库(比如appcompat-v7、support-v4),看看有没有多个版本同时存在——比如parse-livequery可能自带了旧版本的Parse SDK或者Support库,和你用的com.parse:parse-android:1.16.7、26.1.0版本的Support库冲突。
2. 排除冲突的依赖
如果发现冲突,就在parse-livequery的依赖声明里排除掉冲突的模块。比如假设它自带了旧的Parse SDK和Support库,修改你的dependencies部分:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation 'com.android.support:support-v4:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation 'com.parse:parse-android:1.16.7' implementation 'com.android.support:design:26.1.0' // 排除冲突的依赖 implementation('com.github.tgio:parse-livequery:1.0.3') { exclude group: 'com.parse', module: 'parse-android' // 排除自带的Parse SDK exclude group: 'com.android.support', module: 'appcompat-v7' // 排除自带的Support库 exclude group: 'com.android.support', module: 'support-v4' } }
3. 彻底清理缓存
有时候光clean/rebuild不够,得清理Gradle和Android Studio的缓存:
- 删除项目根目录下的
.gradle文件夹 - 打开Android Studio,点击
File -> Invalidate Caches...,选择Invalidate and Restart
4. 确认Multidex配置完全生效
虽然你已经开了multiDexEnabled true,但还要确保Application类正确配置:
- 如果你的项目没有自定义Application类,在AndroidManifest.xml里把application的name改成
android.support.multidex.MultiDexApplication:<application android:name="android.support.multidex.MultiDexApplication" ...> </application> - 如果有自定义Application类,让它继承
MultiDexApplication,或者在attachBaseContext方法里添加:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
按这个流程走一遍,应该就能解决Dex合并的问题了。
内容的提问来源于stack exchange,提问作者wolfvandenkush
相关产品推荐
相关产品推荐

