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

8
我遇到了著名的“: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.access$300(Main.java:83)","position":{},"original":"\tat com.android.dx.command.dexer.Main.access$300(Main.java:83)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)","position":{},"original":"\tat com.android.dx.command.dexer.Main$1.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'])
}

看起来Gradle在我的JDK上有一些问题,但我不知道是什么问题以及如何解决。希望你们能帮忙。
编辑:我发现,version(0034.0000)表示我正在使用Java 8。奇怪的是,我绝对没有使用Java 8。在Android Studio中,我将JDK路径定义为"C:\ Program Files \ Java \ jdk1.7.0_67"。这是64位Java(我正在使用Win 7 64位)。除此之外,我还有32位Java在"C:\ Program Files(x86)\ Java \ jdk1.7.0_75",但我没有从Android Studio指向它的位置(我需要在我的机器上使用两个版本)。有谁知道为什么Android Studio认为我在我的机器上有Java 8吗?正如您在我的gradle构建文件中看到的那样,我将和设置为。是否有任何隐藏的设置在Android Studio中,定义了Java 8设置?
4个回答

1

前往文件 > 其他设置 > 默认设置 > 构建、执行、部署 > 编译器,并在命令行参数中添加以下参数

--debug --stacktrace 

Screenshot here


1

解决了。

让我困惑的是输出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设置都被设置为1.7。

但我知道在某个地方使用了Java 8。这对我来说真的很奇怪。

解决方案:尽管永久通知使用--stacktrace或--debug,但我不知道在哪里使用它们(没有任何说明)。在搜索设置后,我偶然发现了这些选项的文本字段。所以我在里面写了“--debug”。这个选项给了我关于实际引起错误的信息。由于调试模式给出了引起错误的库的标题,该库使用了Java 8。由于Eclipse没有抱怨,我的公司中没有人关心这个问题。这让我以为一切都应该是正确的。

简而言之:如果您遇到错误,像许多人一样,但它们的解决方案不起作用或者您的情况似乎非常特殊,请使用“--debug”。真正的信息被隐藏在那里。

1
能否请您说一下您把这个好用的调试开关放在了哪里呢?:( - Zordid
2
在终端中输入 "gradlew --debug",或者通过选择File->Settings->Build,Execution,Deployment->Compiler,在Command-line Options字段中添加"--stacktrace --debug",使其始终可用。 - Ewoks
请查看此处,将Java SDK版本更改为1.7:https://dev59.com/gmIk5IYBdhLWcg3wFKhK - bora.oren

1

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


如何添加“--debug”?能否展示样本代码?谢谢。 - user1571055

0

我也遇到了同样的问题。

对我来说,以下代码有效:buildToolsVersion '21.1.2' 虽然会有 AGPBI 警告,但仍然可以编译。


谢谢您的回复,但是我的问题仍然存在,即使将构建工具版本改回21.1.2。 - KJaeg

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