今天我遇到了一個問題,有多個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同步,使緩存/重新啓動失效。任何想法我失蹤?
分享你的構建gradle文件。基本上你或你的依賴不止一次引用nineoldannotations。你應該排除除一個以外的所有引用 – 2014-12-05 08:47:30
我嘗試刪除nineoldandroids的所有引用,但該庫(沒有nineoldandroids jar文件)找不到com.nineoldandroids.animation等的引用。 – 2014-12-05 19:06:02
在lib項目中保留'nineoldandroids',但將它從你的編譯中移除 – 2014-12-06 10:02:45