在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'
}
}
}
}