坏类文件魔术或版本

Mar*_*rno 100 android intellij-idea android-gradle-plugin

我已经知道这个问题已经经常被问及答案,但我发现没有一个答案能解决我的问题.

这是错误:

Error:Gradle: Execution failed for task ':ffcommunity:preDexDebug'.
 com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\Android SDK\sdk\build-tools\20.0.0\dx.bat --dex --output D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\build\intermediates\pre-dexed\debug\bananaquery-2ee85432877a057e7414910b8127805535139d5d.jar D:\Users\ReVo\Documents\IntelliJ IDEA\FFCommunity\ffcommunity\libs\bananaquery.jar
Error Code:
    1
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
        at com.android.dx.command.dexer.Main.processClass(Main.java:665)
        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
        at com.android.dx.command.dexer.Main.access$600(Main.java:78)
        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
        at com.android.dx.command.dexer.Main.processOne(Main.java:596)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    1 error; aborting
Run Code Online (Sandbox Code Playgroud)

错误是bad class file magic (cafebabe) or version (0034.0000).

我在同一天多次构建并执行应用程序没有问题,但现在这个消息每次都失败了.


项目SDK Android API 19 Platform和项目级别是1.7.

CompileSDK 19和buildToolsVersion是'20.0.0'.

编译选项:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
Run Code Online (Sandbox Code Playgroud)

dependencies我有:

compile files('libs/bananaquery.jar')
Run Code Online (Sandbox Code Playgroud)

该库是使用Android API 19 Platform具有项目级别的SDK构建的1.7.

我的.jar文件在libs/文件夹中.

我使用IntelliJ IDEA 14 Preview,可能是原因?使用IntellIJ IDEA 13时,它仍然停留在"Gradle sync"

编译的文件可能是无用的,因为我有compile fileTree(dir: 'libs', include: ['*.jar'])太多

pas*_*ssy 95

我的JAVA_HOME变量更改为Java 1.8,并在编译纯java模块作为我的android项目的依赖项时收到此错误消息.

java模块的build.gradle

apply plugin: 'java'
Run Code Online (Sandbox Code Playgroud)

解决方案#1:快速弄脏

我把它设置JAVA_HOME为1.7来修复它:

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
Run Code Online (Sandbox Code Playgroud)

解决方案#2:更改编译器版本:

在build.gradle中将此特定模块更改回1.7

apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
Run Code Online (Sandbox Code Playgroud)

  • 在Gradle的实验版本中,语法为:`compileOptions.with {sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7}` (4认同)

Mar*_*rno 39

好的,我的坏.

在Project SDK部分,当你添加一个时,Android SDK你应该提供Java SDK和我所有的Android SDK都使用Java 8作为SDK,所以它创建了错误版本的类文件,即使项目级别是1.7(我不知道为什么,我认为一切都是由项目级别选择的).

现在我改变了SDK(java version "1.x.0"部分).

在此输入图像描述

它好像编译好了.

之前工作的原因是因为我的SDK是1.8和不是Android API x

  • 打开项目结构窗口>使用"Project SDK"消息选择的位置选择您需要的SDK(您的代码或用于编译外部库的SDK的版本).如果您遇到同样的问题,请检查您的Android SDK行,然后点击"修改".您将被移动到另一个具有Java SDK的面板,选择1.7(或您需要编译的版本) (3认同)
  • 通过转到"模块设置"并将JDK位置编辑到安装了Java 7 jre的主目录,修复了相同的情况 (2认同)

Chr*_*acy 27

如果人们发现@Marco Acierno的答案有点不清楚,那么解决方案是确保您使用Java 7构建而不是更高版本.

对于Android Studio,请更改File -> Project Structure -> SDK Location -> JDK Locationjdk1.7.x.对于命令行,请确保java -version输出java version "1.7.x".

  • 为什么我们不能使用java 8? (15认同)

Vis*_*ngh 5

将JAVA_HOME设置回1.7可以为我工作.