【问题标题】:Gradle Android Project with Java 8 module带有 Java 8 模块的 Gradle Android 项目
【发布时间】:2015-06-04 19:29:51
【问题描述】:

正如我在this post 中看到的,Java 8 目前还没有得到Android 的官方支持。所以我很感兴趣是否可以使用Java 7Java 模块(作为依赖项)和Java 8 构建Android 模块。

例如,我正在尝试创建一个 Gradle 项目,该项目将包含一个 Android 模块和一个 Java 模块作为依赖项。 为两个模块设置了以下compileOptions,一切正常。

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

但如果我尝试将 compileOptionsJava 模块更改为

compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}

我收到以下错误:

Error:Execution failed for task ':fc-android:preDexFreeDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 1

所以问题是,真的有可能让Android 模块用1.7 版本编译,而依赖Java 模块用1.8 编译吗?如果不是,那为什么呢?

更新:

Retrolamba for Gradle(@Saeed 提到)很好,但是它们只支持 lambda,因此无法访问 Stream APIDateTime API 和其他功能。想象一下,如果我们有使用Java 8(没有Android 代码)构建的*.jar 文件。我认为我们不能使用这种*.jar 文件作为Android 模块的依赖项,因为ARTDalvik 将不支持它的字节码,而Java 8 仅支持JVM

【问题讨论】:

    标签: java android gradle java-8 android-gradle-plugin


    【解决方案1】:

    Android 可以从 API 19 开始支持 java 1.7(正如你在这个 doc 中看到的,没有提到 java 1.8),而且它不使用 JVM,而是使用 ART 或 Dalvik,所以它生成 Dalvik bytecode

    我认为如果我们想使用 java 1.8 作为compileOptions 可能 android 运行时无法理解 java 8 中的一些新特性,比如 lambda,所以 gradle 不允许你编译你的代码,你得到了那个异常。

    所以你需要一个字节码转换器来使用

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    

    阅读此tutorial。它将您的字节码转换为与 java 7 兼容。我之前对此进行了测试,它适用于我。

    2016 年更新

    Android N introduces support for Java 8 language features.

    【讨论】:

    • Retrolamba 不错,但是他们只支持 lambda,所以无法访问Stream APIDateTime API 和其他功能。想象一下,如果我们有使用Java 8 构建的*.jar 文件(没有Android 代码)。我认为我们不能使用这样的*.jar 文件作为Android 模块的依赖项,因为ARTDalvik 将不支持它的字节码,而Java 8 仅支持JVM。我说得对吗,@Saeed?
    • 是的,这是真的,实际上它们需要重建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2019-04-08
    • 2016-06-11
    • 2019-07-02
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    相关资源
    最近更新 更多