任务执行失败:':app:preDexDebug'

Execution failed for task: ':app:preDexDebug'

我遇到了著名的“:app:preDexDebug”错误。

首先:清理项目或重建项目没有错误。 在默认设置下,我将项目字节码版本设置为 1.7,在项目结构中的 SDK 位置下,JDK 位置似乎也是正确的。 经过一段时间的研究,我仍然没有找到解决这个问题的方法。

当我尝试运行 Android Studio 下的项目时出现错误。如前所述,清理、重建和与 Gradle 同步工作正常(看起来像 - 没有错误)。

这是 gradle 控制台显示的内容:

Configuration on demand is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug
AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"}
AGPBI: {"kind":"SIMPLE","text":"com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)","position":{},"original":"com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)","position":{},"original":"\tat com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processClass(Main.java:704)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processClass(Main.java:704)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.access0(Main.java:83)","position":{},"original":"\tat com.android.dx.command.dexer.Main.access0(Main.java:83)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:602)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processFileBytes(Main.java:602)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)","position":{},"original":"\tat com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processOne(Main.java:632)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processOne(Main.java:632)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)","position":{},"original":"\tat com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)","position":{},"original":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)","position":{},"original":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)","position":{},"original":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.Main.main(Main.java:106)","position":{},"original":"\tat com.android.dx.command.Main.main(Main.java:106)"}
AGPBI: {"kind":"SIMPLE","text":"...while parsing impl/org/controlsfx/ImplUtils.class","position":{},"original":"...while parsing impl/org/controlsfx/ImplUtils.class"}
AGPBI: {"kind":"SIMPLE","text":"1 error; aborting","position":{},"original":"1 error; aborting"}


 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_67\bin\java.exe'' finished with non-zero exit value 1

如下所示,我删除了 build.gradle 中的 "compile android. ..." 行,但它仍然不起作用。 所以这是我的 gradle 构建文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '22.0.1'
    compileOptions.encoding = 'windows-1251'

    defaultConfig {
        applicationId "de.giessen.advenco.key2operate"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

我的 JDK 看起来 Gradle 有一些问题,但我不知道是什么问题以及如何解决这些问题。希望大家帮帮忙

编辑:我发现 version (0034.0000) 意味着我正在使用 Java 8. 奇怪的是,我绝对不使用 Java 8. 在 Android Studio 我将 JDK 路径定义为 "C:\Program Files\Java\jdk1.7.0_67"。这是 64 位 Java(顺便说一句,我使用的是 Win 7 64 位)。除此之外,我在 "C:\Program Files (x86)\Java\jdk1.7.0_75" 有 32 位 Java,但我没有从 Android Studio 指向它的位置(我的机器上需要两个版本)。有谁知道,为什么 Android Studio 认为我的机器上有 Java 8?正如您在我的 gradle 构建文件中所见,我将 sourceCompatibilitytargetCompatibility 设置为 JavaVersion.VERSION_1_7。 Android Studio 中是否有任何隐藏设置定义了 Java 8 设置?

我遇到了同样的问题。

对我来说作品:buildToolsVersion '21.1.2' 它显示 AGPBI 为警告,但仍然可以编译。

解决了。

让我困惑的是:输出 com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)","position":{},"original":"com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)" 让我想到,错误来自某些 android 库,因为每个 JDK-setting 都设置为 1.7。

但我知道某处使用了 Java 8。我真的很奇怪。

解决方案:即使显示了使用--stacktrace 或--debug 的永久通知,我也不知道在哪里使用它们(在任何地方都没有解释)。搜索设置后,我偶然发现了此选项的文本字段。所以我在里面写了“--debug”。此选项为我提供了有关真正导致错误的信息。感谢 debug-mode 给出了库的标题,这导致了使用 Java 8 的错误。由于 Eclipse 没有抱怨,我公司没有人关心这个。 return 让我想到的是,一切都必须正确。

简而言之:如果您像以前的许多人一样遇到错误,但他们的解决方案不起作用或者您的情况似乎很特殊,只需使用“--debug”。那里隐藏着真实的信息。

要添加 --debug(或 --stacktrace),转到文件 .. 设置 ..构建、执行、部署 .. 编译器 .. 命令行参数

转到文件 > 其他设置 > 默认设置 > 构建、执行、部署 > 编译器 并将以下参数添加到 Command Line Arguments

--debug --stacktrace