【问题标题】:Android Stduio dependency, multiple dex error, dex mergerAndroid Studio依赖,多个dex错误,dex合并
【发布时间】:2015-02-03 03:50:27
【问题描述】:

今天,当我将一个库 (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错误。还尝试了清理、Gradle 同步、使缓存/重新启动无效。知道我缺少什么吗?

【问题讨论】:

  • 分享你的构建 gradle 文件。基本上,您或您的依赖项不止一次引用了 Nineoldannotations。您应该排除除一个以外的所有引用
  • 我尝试删除所有nineoldandroids的引用,但只有一个引用,但是库(没有nineoldandroids jar文件)无法从nineoldandroids中找到com.nineoldandroids.animation等的引用。
  • nineoldandroids 保留在 lib 项目中,但将其从您的编译中删除

标签: android android-studio dependencies dex nineoldandroids


【解决方案1】:

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

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

对于同样的问题,另请参阅link

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2018-05-04
    • 1970-01-01
    • 2018-08-06
    • 2014-11-17
    • 2018-08-29
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多