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

6
你好,我正在做一个项目,使用的是Android Studio。我已经设置好了一切,但是当我运行我的项目时,会出现以下错误。我已经尝试解决这个问题两天了,但是没有成功。可能是我的项目中有什么问题导致了这个错误。
如果有人知道,请帮我解决。
这是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'
}

库的 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'

你能分享一下settings.gradle文件吗?其中包含了将这两个项目链接在一起的设置。 - kandroidj
请分享 settings.gradle 文件。 - kandroidj
@inner_class7,我已经添加了settings.gradle文件。 - N Sharma
4个回答

7

我相信你的问题在于,无论你将库连接到主项目的任何位置,两者之间的支持库和注释都有相同的依赖关系。

如果您的应用程序中有库项目依赖项,您只需要将依赖项放置在库依赖项闭合处即可。

问题在于你有两个 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
@Williams,也尝试在主项目中删除您的注释,参见上文。 - kandroidj
你真是太棒了。 - Nadeem Iqbal

2

由于Facebook SDK 配置为使用 Android 2.3.3,因此它需要注释库。我的应用程序配置为使用 Android > 4.x.x,其中包含注释,冲突已经出现。我已经在 Facebook 的清单文件中更改了配置为适用于 Android > 4.x.x,并解决了这个问题。


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文件, 这个东西花费了我整整一个下午,祝你好运,我的英语很烂, 请原谅我。


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。我不知道这是否是正确的修复方式,但对我来说有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接