【问题标题】:bad class cafebabe or version 0034bad class cafebabe 或版本 0034
【发布时间】:2015-10-20 15:59:38
【问题描述】:

在阅读了其他类似的问题后,我仍然找不到解决方案。我得到以下堆栈跟踪,它抱怨一个 jar 包含我开发的一个库,用 Java 1.7 编译:

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:704)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
at com.android.dx.command.dexer.Main.access$300(Main.java:83)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
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:632)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
...while parsing build/classes/main/com/utils/helpers/DateTimeAdapter.class

我在 Android Studio 和 Eclipse 中都将编译器级别设置为 java 7,在 build.gradle 文件中添加 sourceCompatibility 和 targetCompatibility 并没有解决这个问题。在两个 IDE 中也正确设置了 JDK 的路径。

我发现 0034 是 Java 8 的十六进制,但它甚至没有安装在我的机器上。

我也尝试过编辑thread 中建议的 proguard.bat,但没有成功。

有人对此有什么想法吗?

【问题讨论】:

  • 你知道你的android构建工具的版本吗? Java 7 支持仅在版本 19 中添加。
  • 我正在使用构建工具 21.1.2 并编译到 sdk 21
  • 您可能已经看过并尝试过这个,但如果没有,那好吧,我想读一读:stackoverflow.com/questions/24662801/…
  • javap -verbose build/classes/main/com/utils/helpers/DateTimeAdapter.class 这说明了什么?
  • 检查文件是否以0xcafebabe等开头:rgagnon.com/javadetails/java-0544.html

标签: java android android-studio


【解决方案1】:

尽管类是用Java 7编译的,命令javap -verbose这么说,当我在Android Studio中打开.class文件时,它显示反编译的.class文件,字节码版本:52.0(Java 8) 在屏幕顶部。

最后,再次删除并编译 jar 就成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2012-09-06
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多