在Android开发过程中都避免不了要集成第三方的项目、集成完之后今天碰到这个令人我非常不开心的transformClassesWithDexForDebug Exception、详细的Log如下:
Error:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
或者会出现如下的异常:
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
查阅了好多资料和别人的一些解决方法,如:
1、第一种:
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... //Enabling multidex support. multiDexEnabled true}dependencies { compile ´com.android.support:multidex:1.0.1´
(1) 在defaultConfig 中进行配置为 multiDexEnabled true
(2) 在dependencies 中加入如下依赖 compile ´com.android.support:multidex:1.0.1´
(3) 在清单文件中进行配置Application
<application ... android:name="android.support.multidex.MultiDexApplication"> ...
但是在我的项目中还是没有解决
第二种方法:
如果出现上面的异常会在Gradle Console中显示如上的信息,点击Run with-stacktrace则会在message中出现一些jar包冲突活着版本不一致的一些详细信息,这样在Android Studio切换到Project视图,从.idea中找到冲突的jar进行删除就OK ,重新进行rebuild Project就OK,但是我遇到的问题是,在里面根本找不到冲突的jar,所以第二种解决方法也行不通。
重点来了:
第三种方法:
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion 'xx.x.x' } } } }