Android Studio:Gradle构建失败--任务':dexDebug'执行失败

84
错误:
Gradle: Execution failed for task ':vertretungsplan:dexDebug'.
> Failed to run command:
    P:\Android-Studio\sdk\build-tools\18.0.1\dx.bat --dex --output P:\Projekte\VertretungsplanProject\vertretungsplan\build\libs\vertretungsplan-debug.dex P:\Projekte\VertretungsplanProject\vertretungsplan\build\classes\debug P:\Projekte\VertretungsplanProject\vertretungsplan\build\dependency-cache\debug P:\Android-Studio\sdk\extras\android\m2repository\com\android\support\support-v4\18.0.0\support-v4-18.0.0.jar P:\Projekte\VertretungsplanProject\vertretungsplan\libs\commons-io-2.4.jar P:\Projekte\VertretungsplanProject\vertretungsplan\build\exploded-bundles\VertretungsplanProjectLibrariesActionbarsherlockUnspecified.aar\classes.jar
Error Code:
    2
Output:
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/LoginActivity$2.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/MainActivity$1.class
    trouble processing:
    bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    ...while processing de/MayerhoferSimon/Vertretungsplan/YQL/YqlVplanParser.class
    3 warnings
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
        at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
        at com.android.dx.command.dexer.Main.run(Main.java:232)
        at com.android.dx.command.dexer.Main.main(Main.java:174)
        at com.android.dx.command.Main.main(Main.java:91)

项目结构:
build.gradle (actionbarsherlock):
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
        }
    }
}

build.gradle(代课计划)

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/commons-io-2.4.jar')
    compile project(':libraries:actionbarsherlock')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 11
    }
}

settings.gradle

include ':vertretungsplan', ':libraries:actionbarsherlock'

我该如何修复这个错误?

22个回答

90

正确的答案是,你的一些jar文件没有编译。 你应该进入项目中的build.gradle文件,查看依赖项。

如果你只是导入一些jar文件,你可以尝试将它们删除并逐个添加。这将帮助你确定哪一个引起了错误。

在我的情况下,我就是这样做的,当我导入最后一个时,应用程序就编译了。所以我认为真正的问题是我一次导入了太多的jar文件。但现在一切都正常了。


20
如果您使用 ./gradlew assemble --stacktrace --info 进行编译,它会准确地告诉您哪个 jar 包出了问题。 - Nir Hartmann
@NirHartmann 快问一下,这个命令是我应该放在 build gradle 中吗?我不确定它应该放在哪里。 - Fallenreaper
2
@Fallenreaper 不确定我是否理解你的问题,我的意思是在你的根项目目录中有一个名为 exec gradlew 的文件,如果你像我说的那样从终端或命令提示符中启动它,你就会知道问题出在哪里,然后你可以修复它。 - Nir Hartmann
@Fallenreaper- 已经在终端中导航到 gradle/gradle 并输入了 ./gradlew assemble --stacktrace --info,但是出现了“没有这样的目录”错误,这是你在建议中所指的吗? - dancingbush
这对我来说真的非常有帮助。 - bhavesh kaila

69

我突然遇到了同样的问题,尽管没有任何值得注意的更改。

我通过删除app/build目录,并让gradle重新构建整个项目来解决它。


2
在我将一个活动添加到替换主活动时,我遇到了同样的问题。我进行了清理操作,但它没有起作用。感谢您提供的解决方案。 - Climbatize
1
另外,尝试清理库项目中的app/build文件夹,这些项目可能被包含在你的应用程序中。 - Voy
1
很努力的尝试,但是没有解决我的问题 :/ - Maxime T
1
请帮我解决问题。谢谢。 - dian
1
删除构建文件夹确实非常有帮助。 - bhavesh kaila

15

您必须检查是否再次导入相同的JAR文件。在我的情况下,有一个包含在另一个JAR文件中被导入的类。因此,只需检查在整个项目中是否两次包含了任何lib / class文件。


1
这对我来说在技术上是正确的,但发生了因为我的 build.gradle 文件中的依赖项包含了两个不同版本的 Android 支持库,在项目中添加新活动后出现了这种情况。 - Josh
当这个问题解决时,我还没有完成,但是它指引了我的方向。谢谢。 - Andreas Rudolph
解决了我的问题,但我从错误消息中永远不会想到问题是由于重复的JAR包。我一直在将Volley作为项目级别的模块导入,但因为我想要在使用AS构建和使用Cordova构建之间进行切换,所以我设置了我的环境来将Volley作为Cordova插件引入。在重新生成平台后,我得到了这个错误消息。你关于同样的库被两次导入的评论让我意识到我应该删除'作为导入库的Volley'设置,所以谢谢。 - Mark Birbeck

4
问题不在于“执行任务':dexDebug'失败”,如果你看一下上面显示的红色错误,你会看到这个。

enter image description here

为了永久解决这个问题,只需在您的build.gradle文件中添加以下行即可。
android {
    dexOptions {
        jumboMode = true
    }
}

更多细节请查看此问题:这里


4
我也遇到了同样的问题。 在我的情况下,问题是在重新启动后开始的。 我关闭了我的应用程序,然后关闭了Android Studio(在我的情况下是V1.1.0),最后正常关机。之后,我修改了一个Java文件来添加一个RadioGroup对象,然后问题出现了。
我只改变了Gradle配置文件中的一个简单的“0”为“1”,解决了我的问题,因为问题的根本原因是在Gradle执行过程中生成的。以前我使用的版本是“1.0.0”,然后我改成了如图所示的“1.1.0”。
Gradle配置文件的位置已更改 Location of the Gradle configuration a changed 我从哪里找到了正确的版本(文件->设置->Gradle->实验) Location where I took the right version from (File -> Settings -> Gradle -> Experimental

将Gradle工具版本更改为1.1.0对我有用。谢谢! - kalan nawarathne

4

我在使用Java JRE 1.8编译Eclipse中的utils库JAR文件,并将其用于Android Studio 1.1.0的/libs/目录时,遇到了类似的错误。

我的Android Studio设置为使用JDK1.8.0。

我将Eclipse切换到使用JRE 1.7,并解决了这个错误。 Eclipse:窗口->首选项->Java选项卡->编译器->兼容性级别1.7。它很可能会提示您切换JRE系统库到jdk1.7.x_x。

在导出时,您可能需要确保取消勾选“压缩jar”选项。我还没有测试它是否有影响,但我怀疑它与此无关。


谢谢!这解决了我在Android Studio 1.4和Gradle experimental-0.2.1上的问题;)不过,我不得不回退到JDK 1.7.1才能完全解决这个问题。 - Stef

3

ANDROID STUDIO用户可以尝试以下方法:

您需要将以下内容添加到gradle文件的依赖项中:

compile 'com.android.support:multidex:1.0.0'

然后在你的清单文件的application标签中添加以下行(支持多dex应用程序):

android:name="android.support.multidex.MultiDexApplication"

3

确保您的AndroidManifest文件在清单节点中包含包名称。为我解决了这个问题,设置一个软件包名称。


在我的情况下,包名称在两个库子项目中重复。 - sasha_trn

2
可以通过添加

来解决这个问题。
compile 'com.android.support:support-v4:18.0.0'

针对vertretungsplan build.gradle中的依赖项,进行编译后,移除该行并再次编译即可。

现在它可以正常工作了。


为什么是“v4:18.0.0”?为什么不是“v4:+”? - IgorGanapolsky
4
@IgorGanapolsky 因为动态版本通常会导致不可预测的结果。 - aga

1
我有两个不兼容的依赖关系。
以下依赖关系导致错误。
compile 'com.google.android.gms:play-services-fitness:8.3.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'

将健康依赖项更改为版本8.4.0后,我能够运行该应用程序。

compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'

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