2014-12-05 44 views
1

今天我遇到了一個問題,有多個dex文件,當我在使用另一個庫(Float Labeled EditText)的項目中添加庫(MaterialDesignLibrary)時。Android Stduio依賴,多個dex錯誤,dex合併

通過研究,我發現衝突是由於兩個庫都使用nineoldandroid作爲依賴。我測試並看到Float Labeled EditText帶領我的項目在gradle同步時在我的外部庫中添加「library-2.4.0.jar」,而Material Design Library包含「nineoldandroids-2.4.0.jar」文件「/庫」。

我試圖刪除重複在這裏和那裏,尋找解決方案几個小時,但仍然沒有運氣。

在這種情況下,jar文件名是由於dex合併失敗導致多個dex錯誤的原因嗎?或者,DexMerger足夠聰明地弄清楚兩個不同的jar文件實際上是相同的依賴關係?我不得不說,我仍然不清楚DexMerger是如何工作的。


下面是我得到的錯誤:

Error:Execution failed for task ':app:dexDebug'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 

...

Output: 
UNEXPECTED TOP-LEVEL EXCEPTION: 
com.android.dex.DexException: Multiple dex files define Lcom/nineoldandroids/animation/Animator$AnimatorListener; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) 
    at com.android.dx.command.dexer.Main.run(Main.java:230) 
    at com.android.dx.command.dexer.Main.main(Main.java:199) 
    at com.android.dx.command.Main.main(Main.java:103) 

編輯12/5

我甚至試圖把只有一個副本app/libs中的nineoldandroids-2.4.0.jar,刪除了所有引用取消其他兩個模塊(materialLib和floatlabeledittext)的jar或maven回購依賴關係。然後我在兩個模塊中加入了

compile files(':app/libs/nineoldandroids-2.4.0.jar') 

確保只有一個被引用的jar文件副本。

的build.gradle在我的應用程序有

compile project(':materialLib') 
compile project(':floatlabeledittext') 

下的依賴。仍然有多個dex錯誤。還嘗試清潔,Gradle同步,使緩存/重新啓動失效。任何想法我失蹤?

+0

分享你的構建gradle文件。基本上你或你的依賴不止一次引用nineoldannotations。你應該排除除一個以外的所有引用 – 2014-12-05 08:47:30

+0

我嘗試刪除nineoldandroids的所有引用,但該庫(沒有nineoldandroids jar文件)找不到com.nineoldandroids.animation等的引用。 – 2014-12-05 19:06:02

+0

在lib項目中保留'nineoldandroids',但將它從你的編譯中移除 – 2014-12-06 10:02:45

回答

0

我也有類似的問題。我的兩個圖書館項目使用nineoldandroids作爲依賴關係。因此,我通過在build.gradle文件,它解決了問題加入如下代碼排除nineoldandroids

compile ('com.balysv.materialmenu:material-menu:1.5.4') { 
    exclude group: 'com.nineoldandroids', module: 'library' 
} 

也看到這個link,對於同樣的問題。

相關問題