RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex解決方法

在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">
        ...

但是在我的項目中還是沒有解決

第二種方法:

image.png
如果出現上面的異常會在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'
                }
            }
        }
    }
在App目錄下的build.gradle中進行配置如上信息,簡單解釋一下,這裏的xx.x.x則代表假如gradle的時候,出現了multidex,則使用我們指定的版本,這裏我使用的是26.1.0,重新gradle則解決問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章