今天,当我将一个库( MaterialDesignLibrary)添加到使用另一个库(Float Labeled EditText )的项目中时,我遇到了多个 dex 文件的问题。
通过研究,我发现冲突来自两个库都使用 Nineoldandroids 作为依赖项。我测试并看到Float Labeled EditText导致我的项目在 gradle 同步时在我的外部库中添加“library-2.4.0.jar”,而Material Design Library在“/libs”下包含“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 repo 依赖项。然后我在两个模块中添加
compile files(':app/libs/nineoldandroids-2.4.0.jar')
确保只有一个被引用的 jar 文件的副本。
我的应用程序中的 build.gradle 有
compile project(':materialLib')
compile project(':floatlabeledittext')
在依赖项下。还是多个dex错误。还尝试了 Clean、Gradle Sync、使缓存/重新启动无效。知道我缺少什么吗?