坏类文件魔术或版本

时间:2014-07-09 20:01:19

标签: android intellij-idea android-gradle

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

错误:

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)

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


Project SDK为Android API 19 Platform,项目级别为1.7

CompileSDK为19,buildToolsVersion为'20.0.0'

编译选项:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

并在dependencies我有:

compile files('libs/bananaquery.jar')

使用项目级别为Android API 19 Platform的SDK 1.7构建库。

我的.jar文件位于libs/文件夹中。

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

编译文件可能没用,因为我还有compile fileTree(dir: 'libs', include: ['*.jar'])

10 个答案:

答案 0 :(得分:95)

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

java模块的build.gradle

apply plugin: 'java'

解决方案#1:快速肮脏

我通过将JAVA_HOME设置回1.7来修复它:

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

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

在build.gradle

中将此特定模块更改回1.7
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7

答案 1 :(得分:39)

好的,我的坏。

在Project SDK部分,当您添加Android SDK时,您应该提供Java SDK,并且我的所有Android SDK都使用 Java 8 作为SDK,因此它会创建类文件即使项目级别为1.7,我也会使用错误的版本(我不知道为什么,我认为所有内容都是由项目级别选择的。)

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

enter image description here

似乎编译好了。

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

答案 2 :(得分:27)

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

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

答案 3 :(得分:5)

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

答案 4 :(得分:3)

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

在插件中是库和应用程序

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

和java

sourceCompatibility= 1.7
targetCompatibility= 1.7

答案 5 :(得分:2)

当您使用未使用Java 6或更高版本但使用Java 6或更高版本构建的.jar文件时,会出现此问题。

如果您构建了.jar个文件,那么您无需更改GradleProGuardCompiler Version中的任何内容。解决方案非常简单,只需再次构建.jar文件,但使用的是Java 5或更低版本

More details

答案 6 :(得分:1)

我有类似的问题,我通过升级我的proguard来解决它。 通过此命令获取您的proguard版本

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

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

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

希望这对你有所帮助。 如果你使用java 8那么你应该升级到proguard 5.x coz proguard 4.x不支持java 8。

答案 7 :(得分:1)

当我试图从netbeans到android studio添加一个自制库时,有一个类似的问题。设置android studio中的源兼容兼容性和netbeans中的源/二进制格式(均为!)到java 1.7解决了这个问题。

在android studio中:

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

在netbeans中:

档案 - >项目属性 - >来源 - >源/二进制格式为1.7

然后清理并构建你的netbeans projekt并从" NBProj / dist"复制.jar。到" app / libs"

答案 8 :(得分:0)

如果只安装了Java8,只需将Java编译器级别设置为1.7,然后重建项目即可。

答案 9 :(得分:0)

使用第三方库时出现错误。根据上述问题,有必要根据上述堆栈跟踪消息替换库:

        ...
    ...while parsing com/comuf/revonline/bananaquery/BananaInsert.class
    ...

具有适当的版本。

对应于此问题,bananaquery.jar将由与Java兼容的版本代替。