坏的类文件魔术或版本

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

这是错误的:

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 

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

我在同一天build造和执行应用程序没有多less问题,但现在每次都有这个消息失败。


项目SDK是Android API 19 Platform ,项目级别是1.7

CompileSDK是19 ,buildToolsVersion是'20.0.0' .0.0 '20.0.0'

编译选项:

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 

并在dependencies我有:

 compile files('libs/bananaquery.jar') 

该库使用SDK Android API 19 Platform与项目级别1.7构build。

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

我使用IntelliJ IDEA 14 Preview,这可能是原因? 随着IntellIJ IDEA 13,它仍然停留在“Gradle同步”

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

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

java模块的build.gradle

 apply plugin: 'java' 

解决scheme#1:快速变脏

我通过将我的JAVA_HOME重新设置为1.7来修复它:

 export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

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

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

 apply plugin: 'java' sourceCompatibility = 1.7 targetCompatibility = 1.7 

好的,我的不好。

在Project SDK部分,当您添加一个Android SDK您应该提供Java SDK而我所有的Android SDK都使用Java 8作为SDK,因此即使Project级别为1.7 ,我也不会创build错误版本的类文件知道为什么,我认为一切都是由项目级select)。

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

在这里输入图像描述

它似乎编译好。

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

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

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

将JAVA_HOME设置回1.7为我工作。

在每个build.grade文件中将所有模块java版本更改为java 1.7。

在插件是库和应用程序

 compileOptions{ sourceCompatibility=JavaVersion.VERSION_1_7 targetCompatibility=JavaVersion.VERSION_1_7 } 

和在Java中

 sourceCompatibility= 1.7 targetCompatibility= 1.7 

当您使用不使用Java 6或更高版本的任何function但使用Java 6或更高版本构build的.jar文件时,会发生此问题。

如果您构build.jar文件,则不需要在GradleProGuardCompiler Version更改任何内容。 解决scheme非常简单,只需再次构build.jar文件,但使用Java 5或更less

更多细节 。

我有一个类似的问题,我解决了升级我的proguard。 通过这个命令获得你的proguard版本

 java -jar ~/android-sdks/tools/proguard/lib/proguard.jar 

从这里获取最新的progaurd.jar文件( http://proguard.sourceforge.net

用新的.jar文件replace现有的android-sdks / tools / proguard / lib / proguard.jar。

希望这应该可以帮到你。 如果你用java 8,那么你应该升级到proguard 5.x coz proguard 4.x不支持java 8。

有一个类似的问题,当我试图从netbeans添加一个自制的库到android studio。 设置源码和目标兼容性在android studio和源码/二进制格式在NetBeans(都!)到Java 1.7解决了这个问题。

在android工作室:

项目结构 – >模块/应用程序 – > Propreties – >源和目标为1.7

在netbeans中:

文件 – >项目属性 – >源 – >源/二进制格式为1.7

然后清理并构buildnetbeans项目,并将.jar从“NBProj / dist”复制到“app / libs”

如果只安装了Java8,共享案例的解决scheme,只需将Java编译器级别设置为1.7,然后重新生成项目应该是可以的。