com.android.dex.DexException:多个dex文件定义Landroid / support / annotation / AnimRes;

时间:2015-04-14 13:02:19

标签: android android-studio android-gradle build.gradle

您好我正在处理我正在使用Android Studio的项目。我已经设置了一切,但是当我运行我的项目时,我得到了以下错误。我最近2天无法解决这个问题。我的项目中可能导致此错误的问题

如果有人知道,请提供帮助。

app build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "in.xyz"
        minSdkVersion 15
        targetSdkVersion 22
        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:22.0.+'
    //compile files('libs/android-support-v4.jar')
    compile 'com.android.support:support-v4:22.0.+'
    compile 'com.android.support:support-annotations:20.0.0'
}

library build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 22
    }

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

dependencies {
    //compile files('libs/android-support-v4.jar')
    compile 'com.android.support:support-v4:22.0.+'
    compile 'com.android.support:support-annotations:20.0.0'
}

的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

...

UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes;
        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)
    Error:Execution failed for task ': app:dexDebug'.

settings.gradle

include ':app'
include ':multiStateToggleButton'

4 个答案:

答案 0 :(得分:6)

我相信你的问题是,无论你将图书馆链接到主项目,你的支持库和注释都有相同的依赖关系。

如果您将库项目作为应用程序中的依赖项,则只需要将依赖项放在库依赖项闭包中。

问题是您有两个dex文件,因为有两个具有相同名称的文件,因为文件与您的依赖项重叠。

首先将模块复制到主项目的libs /文件夹,然后

在主项目的根目录中创建settings.gradle文件:

include 'app_name', 'library_name'
project(':LibraryNameGoesHere').projectDir = new File('libs/LibraryNameGoesHere')

对于您图书馆的build.gradle

dependencies {
    compile files('libs/android-support-v4.jar')
    compile 'com.android.support:support-v4:22.0.+'
    compile 'com.android.support:support-annotations:20.0.0'
}

然后为您的主项目build.gradle

dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     compile 'com.android.support:appcompat-v7:22.0.+'
     compile project(":libs:LibraryNameGoesHere")
}

答案 1 :(得分:2)

由于facebook sdk配置使用Android 2.3.3,因此需要注释lib。 我的应用程序配置使用Anndoid> 4.x.x,包含Annotation,冲突是emarged。 我已经在facebbok mainfest中更改了Android> 4.x.x它解决了这个问题。

答案 2 :(得分:0)

如果你将项目从eclipse迁移到studio,然后你的项目需要一个新模块,你可以在模块中添加build.gradle,添加像这样的依赖项,

compile 'com.android.support:support-annotations:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
//recyclerview
compile 'com.android.support:cardview-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.3'

您可能会看到这个愚蠢的问题,因为旧项目包含了像android-support-v4.jar这样的jar文件 这个狗屎覆盖了编译(东西)所以你必须删除* .jar文件, 这个狗屎下午我的洞,祝你好运,我的英语是游泳池, 请原谅我

答案 3 :(得分:0)

在使用Android Studio从Eclipse导入项目后,我得到了这个错误。在/app/build.gradle文件中,我在依赖项部分中有两个条目,它看起来像这样

dependencies {
    compile files('libs/android-support-v13.jar')
    compile files('libs/android-support-v4.jar')
}

我删除了对v4的引用,如下所示

dependencies {
    compile files('libs/android-support-v13.jar')
}

我清理了项目并能够构建我的APK。我不知道这是否是解决问题的正确方法,但它对我有用。