【问题标题】:Multiple dependencies are trying to import “UNEXPECTED TOP-LEVEL EXCEPTION:”多个依赖项正在尝试导入“UNEXPECTED TOP-LEVEL EXCEPTION:”
【发布时间】:2015-02-09 23:27:34
【问题描述】:

我的项目中有两个库。

https://github.com/rengwuxian/MaterialEditText

https://github.com/navasmdc/MaterialDesignLibrary

它可以编译,但是当我运行程序时它会报告错误。

UNEXPECTED TOP-LEVEL EXCEPTION:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    C:\Users\Alvaro\AppData\Local\Android\sdk\build-tools\21.1.2\dx.bat --dex --no-optimize --output D:\ALVARO\AndroidStudioProjects\Proyecto\app\build\intermediates\dex\debug --input-list=D:\Alva\AndroidStudioProjects\Proyecto\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
    2
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:596)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
        at com.android.dx.command.dexer.Main.run(Main.java:246)
        at com.android.dx.command.dexer.Main.main(Main.java:215)
        at com.android.dx.command.Main.main(Main.java:106)

我知道问题所在,但我无法解决

问题

多个依赖项正在尝试将 Nineoldandroids 准确地导入“nineoldandroids”

app build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.alva.proyecto"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'

    //seconds library
    compile project(':materialDesign')

    //first library
    compile project(':EditText') 
}

第一个库 build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile 'com.android.support:support-annotations:21.0.3'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.android.support:appcompat-v7:21.0.3'
}

秒库 build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 8
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 8
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.+'
    compile files('libs/nineoldandroids-2.4.0.jar')
}

我试过了:

1. 装上“app”build.gradle:

compile project(':EditText') {

        exclude group: 'com.nineoldandroids', module: 'library:2.4.0'
    }

不起作用,它报告了一个错误

Error:(31, 0) Gradle DSL method not found: 'exclude()'
Possible causes:<ul><li>The project 'Proyecto' may be using a version of Gradle that does not contain the method.
<a href="openGradleSettings">Gradle settings</a></li><li>The build file may be missing a Gradle plugin.
<a href="apply.gradle.plugin">Apply Gradle plugin</a></li>

2. 从秒库中删除“nineoldandroids”,不工作

有什么建议吗?

【问题讨论】:

  • 你为什么在本地使用这些库,而不是使用它们各自的工件?然后 Gradle 可能会自动解决您的依赖冲突。除此之外,如果您所做的只是大喊“NOT WORKS”而不完全准确地解释您的意思,我们将无法帮助您。例如,在一种情况下,您还大喊“IT'S REPORTS AN ERROR”,但并未实际向我们提供错误。
  • @CommonsWare 对不起,但是..您可以阅读我的问题上的错误,我也复制了...而且我不知道如何使用它们各自的工件导入...
  • “你可以阅读我的问题的错误,我也复制了”——你是对的,第一个。对于没有给予足够的关注,我深表歉意。
  • @CommonsWare 不用担心,因为第二个错误只是报告库类的错误......我不知道如何解决这个问题......
  • 顺便说一句,关于第一个错误,你可以看看gradle.1045684.n5.nabble.com/…

标签: android android-studio


【解决方案1】:

我不知道如何使用它们各自的工件导入

它在每个库的文档中。

The MaterialEditText "Download" section 引用:

compile 'com.rengwuxian.materialedittext:library:1.8.2'

The "How to Use" section of MaterialDesignLibrary 引用:

repositories {
    jcenter()
}

dependencies {
    compile 'com.github.navasmdc:MaterialDesign:1.+@aar'
}

然后,Gradle 将(希望)能够检测到这两个依赖项本身都依赖于 nineoldandroids 并解决冲突。我说“希望”是因为“seconds library build.gradle”来自哪个库都使用nineoldandroids 的本地副本,这不是一个好主意。不过,这两个 GitHub 存储库似乎都没有那个特定的 build.gradle 文件,所以你可能没问题。

【讨论】:

  • 好的,谢谢,我会为下一个项目做,因为我不能在这个项目中,确定秒库的原因来自使用 Nineildandroids 的本地副本......非常感谢您的帮助。
  • @CommonsWare:如果你能看看我的question ...比你更荣幸:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2014-08-12
相关资源
最近更新 更多