【问题标题】:Gradle Build FAILED - bad class file magic (cafebabe) or version (0034.0000)Gradle Build FAILED - 错误的类文件魔法(cafebabe)或版本(0034.0000)
【发布时间】:2020-11-28 06:00:15
【问题描述】:

我正在尝试编译一个由应用程序和具有多个依赖项(lambdj、org.json、gson、okhttp)的模块组成的简单 Android 应用程序。

但是我在编译时遇到了这个错误,我不知道如何解决它(以及问题出在哪里)

:app:preDexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes
    at com.android.dx.command.dexer.Main.processClass(Main.java:752)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
    at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
    at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
    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:672)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)
Caused by: 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.parseClass(Main.java:764)
    at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
    at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
    at com.android.dx.command.dexer.Main.processClass(Main.java:749)
    ... 12 more
1 error; aborting
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_31\bin\java.exe'' finished with non-zero exit value 1
Information:BUILD FAILED

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    堆栈跟踪对我来说不是很清楚......经过一些搜索后,我找到了这个线程 (Using lambdaj in android)。

    发布的唯一一个答案建议检查 hamcrest 库(lambdaj 的依赖项,版本 1.1),因此我决定将可用的最新 hemcrest 库(1.3 版本)添加到我的 gradle 构建配置中。

    compile 'org.hamcrest:hamcrest-all:1.3'
    

    项目构建成功!

    希望对你有帮助!


    更新:

    我的项目中的 lambdaj 有一些问题,这个库并不完全兼容。我搬到了 retrolambda,看看吧!

    【讨论】:

    • 我最近也遇到了这个错误(在 Android 上使用 Retrolambda)。原来,在我们的项目中构建依赖项的 Jenkins 服务器上的 JDK 从 1.7 升级到了 1.8。
    【解决方案2】:

    这通常是由于在非 Java 8 项目上使用 Java 8 库引起的,反之亦然。

    对我来说,解决方法是在我的项目和我使用的库中使用 retrolambda:

    在您的主要build.gradle 文件中:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.5.0'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
            classpath 'me.tatarka:gradle-retrolambda:3.2.4'
        }
    }
    

    然后在您的应用程序/库build.gradle 文件顶部:

    apply plugin: 'me.tatarka.retrolambda'
    

    还要确保为 Java 8 设置它:

    android {
    
        ...
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

    retrolambda 插件在编译时起作用并将 Java8 lambda 支持应用于您的代码,有关其作用的更多信息,请参阅https://github.com/evant/gradle-retrolambda

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 2016-04-15
      相关资源
      最近更新 更多