【问题标题】:Java is backward compatible but while trying to upgrade JDK version 1.7 to 1.8 in my android project it's not runningJava 向后兼容,但在我的 android 项目中尝试将 JDK 版本 1.7 升级到 1.8 时,它没有运行
【发布时间】:2016-02-02 13:33:22
【问题描述】:

我创建了一个在 JDK 1.8 中运行的“Hello World”应用程序,但是当我尝试升级我的工作项目时,我遇到了以下错误:

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 ':Wallet:dexKtakDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

【问题讨论】:

    标签: android dependencies java-8


    【解决方案1】:

    JDK 是(通常)向前兼容的。 JRE(通常)是向后兼容的。

    Android 环境目前不支持 Java 8。最高支持 Java 7(用于 kitkat)。

    如果您的目标是 Android 5.0 或更高版本,则需要 Java 7 或更高版本。

    【讨论】:

    • 我有 minSdkVersion 15,targetSdkVersion 23,所以我可以使用 1.8
    • 是的,你可以使用 Java 8
    • Error:com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) 是我得到的错误。
    • 那是因为你使用的是 Java 8 我猜,如果有必要恢复到 7!
    【解决方案2】:

    正如大家所解释的,android 仍然在 java 7 上编译。我遇到了问题,因为项目中包含的 java 库采用 sourceCompatibility = 1.8。

    我通过添加解决了这个问题

    apply plugin: 'java'
    
    sourceCompatibility = 1.7
    targetCompatibility = 1.7 
    

    gradle 文件中的代码。

    同样在安卓中

    apply plugin: 'com.android.application'
    
    compileOptions {
                sourceCompatibility JavaVersion.VERSION_1_7
                targetCompatibility JavaVersion.VERSION_1_7
    }
    

    defaultConfig 子句下

    现在我的 android 项目使用 JDK 1.8 运行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2018-06-14
      • 2021-09-07
      • 1970-01-01
      • 2015-12-04
      相关资源
      最近更新 更多