【问题标题】:Building android app with scala "bad class file magic"使用 scala“坏类文件魔术”构建 android 应用程序
【发布时间】:2015-10-08 04:07:29
【问题描述】:

我的应用突然停止在 Android Studio 中构建。消息:

意外的顶级异常: com.android.dx.cf.iface.ParseException:坏类文件魔术 (cafebabe) 或版本 (0034.0000) 在 com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472) 在 com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 在 com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 在 com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 在 com.android.dx.command.dexer.Main.processClass(Main.java:704) 在 com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) 在 com.android.dx.command.dexer.Main.access$300(Main.java:83) 在 com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602) 在 com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 在 com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 在 com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 在 com.android.dx.command.dexer.Main.processOne(Main.java:632) 在 com.android.dx.command.dexer.Main.processAllFiles(Main.java:510) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java:280) 在 com.android.dx.command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx.command.Main.main(Main.java:106) ...解析时 pl/qus/xenoamp/helper/XenoScala$.class 1 错误;中止

我没有更改JDK版本或AS版本...

但后来我检查了默认的 Java 环境,它被设置为 1.8。将其更改为 1.7 会产生不同的错误:

错误:原因:scala/util/Properties$:不支持的major.minor 52.0版

更多信息:虽然我的 Scala 库是为 60.0 (Java 6) 编译的,但在构建 gradle 期间缓存了一个确实为 52.0 构建的版本:

~.gradle\caches\modules-2\files-2.1\org.scala-lang\scala-library\2.12.0-M2\8453b80505a57d429f321b94e1fb4ca09b037fc0

怎么了?我该怎么办?!

【问题讨论】:

    标签: java android scala android-studio


    【解决方案1】:

    According to this answer,看来 ParseException 的原因是使用了 Java 1.8。

    “Unsupported major.minor version 52.0”错误似乎是由于运行时与编译时代码不兼容。我相信major.minor 52.0 对应于Java 1.8,而51.0 对应于Java 1.7。很可能通过使用 Java 1.7 完全重建您的项目,问题就会消失。

    【讨论】:

      【解决方案2】:

      切换到 1.7 并确保您依赖的任何库(特别是 scala 标准库)都是为 1.7 构建的 - 从该错误看来,您的类路径(即 scala 标准库)上的 scala.util.Properties 是为1.8.

      【讨论】:

      • 如果你只能帮助我在 Windows 上的 scala 标准库位置......它只是在 Scala 安装目录中吗?我很确定我在 Scala 主页上看到了 Scala 使用 6 字节码的信息,你认为最新的包编译为 8 字节码吗?哦,看:Scala 2.11.x 系列以 Java 6 为目标,对 Java 8 具有(不断发展的)实验性支持。在 2.11.1 中,Java 8 支持主要限于读取 Java 8 字节码和解析 Java 8 源代码。请继续关注更完整的(实验性)Java 8 支持。下一个主要版本 2.12 很可能默认以 Java 8 为目标。
      • 我找到了 lib 并验证了这个具体类是为 50.0(即 Java 6)编译的,所以肯定有其他问题!
      • hmmm... 但我的 Android 工作室不知何故将它重新编译为 52.0 在 ~\.gradle\caches\modules-2\files-2.1\org.scala-lang\scala-library\2.12.0 -M2\8453b80505a57d429f321b94e1fb4ca09b037fc0
      【解决方案3】:

      好的,再次供将来参考。这是由 build.gradle 中的一个小变化引起的。来自

      compile 'org.scala-lang:scala-library:2.11.+'
      

      compile 'org.scala-lang:scala-library:2.+'
      

      Scala 2.11 编译为 Java 6,Scala 2.12 编译为 Java 8

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-29
        • 2018-09-04
        • 1970-01-01
        • 2021-01-11
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        相关资源
        最近更新 更多