1

今天,当我将一个库( 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、使缓存/重新启动无效。知道我缺少什么吗?

4

1 回答 1

0

我也有类似的问题。我的两个库项目正在使用nineoldandroidsas 依赖项。所以我通过在解决问题的文件中nineoldandroids添加以下代码来排除:build.gradle

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

对于同样的问题,另请参阅此链接。

于 2015-12-20T15:51:10.283 回答