意外的TOP_LEVEL EXCEPTION多个dex文件定义了Landroid / support / annotation / AnimRes

时间:2015-06-10 20:11:48

标签: java android android-support-library android-library dex

在我将新库添加到我的项目后,我开始收到此错误:

  

错误:任务':app:dexDebug'执行失败。   com.android.ide.common.internal.LoggedErrorException:无法运行命令:       D:\ Android \ sdk \ build-tools \ 21.1.2 \ dx.bat --dex --no-optimize --output D:\ Android \ AndroidStudioProjects \ Discounty \ app \ build \ intermediates \ dex \ debug --input -list = d:\的Android \ AndroidStudioProjects \ Discounty \应用\建立\中间体\ TMP \ DEX \调试\ inputList.txt   错误代码:       2   输出:       意外的顶级例外情况:       com.android.dex.DexException:多个dex文件定义Landroid / support / annotation / AnimRes;           在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)           在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)           在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)           在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)           在com.android.dx.merge.DexMerger.merge(DexMerger.java:189)           在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)           在com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)           在com.android.dx.command.dexer.Main.run(Main.java:246)           在com.android.dx.command.dexer.Main.main(Main.java:215)           在com.android.dx.command.Main.main(Main.java:106)

我在stackoverflow上查看了大量类似的问题,但没有找到可行的解决方案。

下面是我的项目结构的截图和库项目的build.gradle文件(在libs文件夹中),here's the link for the screenshotenter image description here

这是我的root build.gradle文件:

buildscript {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
}

这是来自app文件夹的build.grandle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.discounty.discounty"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }

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

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'cn.pedant.sweetalert:library:1.3'
    compile 'com.android.support:recyclerview-v7:21.0.0'
    compile 'com.getbase:floatingactionbutton:1.6.0'
    compile 'com.yalantis:contextmenu:1.0.0'
    compile('de.keyboardsurfer.android.widget:crouton:1.8.4@aar') {
        exclude group: 'com.google.android', module: 'support-v4'
    }
    compile project('libs:swipe_menu_list_view')
}

我尝试清理项目,但它没有帮助。

我添加的新库(swipe_menu_list_view)包含support-v4依赖项,我不会在项目的其他任何地方使用support-v4(或者至少我是这么认为),但我&# 39;我们读过这个错误可能会发生,因为在一个项目中使用了同一个库的不同版本。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

当您使用同一个库的2个不同版本时会发生这种情况。

您可以使用命令gradle dependencies

呈现依赖关系树

在你的情况下:

'com.getbase:floatingactionbutton:1.6.0'使用

    <dependency>
          <groupId>com.android.support</groupId>
          <artifactId>support-annotations</artifactId>
          <version>19.1.0</version>
    </dependency>

appcompat 21.0.3使用

<dependency>
  <groupId>com.android.support</groupId>
  <artifactId>support-annotations</artifactId>
  <version>21.0.3</version>
  <scope>compile</scope>
</dependency>

您可以检查是否有使用相同21.0.3的更新版本,或者您可以使用以下内容排除依赖项:

compile('com.getbase:floatingactionbutton:1.6.0') {
        exclude group: 'com.android.support', module: 'support-annotations'
    }