首页 文章

坏类文件魔法或版本

提问于
浏览
100

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

这是错误:

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')

该库使用SDK Android API 19 Platform 构建,项目级别为 1.7 .

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

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

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

9 回答

  • 0

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

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

  • 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

    我有一个类似的问题,我通过升级我的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 .

  • 27

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

    在android studio中:

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

    在netbeans:

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

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

  • 1

    我的 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
    
  • 5

    如果只安装Java8,则共享案例的解决方案,只需将Java编译器级别设置为1.7然后重建项目即可 .

  • 3

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

  • 1

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

    在插件中,它是库和应用程序

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

    在java中

    sourceCompatibility= 1.7
    targetCompatibility= 1.7
    
  • 95

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

    如果您构建了 .jar 文件,则无需更改 GradleProGuardCompiler Version 中的任何内容 . 解决方案非常简单,只需 build that .jar file again but using Java 5 or less .

    More details .

相关问题