gpt4 book ai didi

java - 使用 Java 8 模块的 Gradle Android 项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:43 24 4
gpt4 key购买 nike

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

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

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}

但是如果我尝试将我的 Java 模块的 compileOptions 更改为

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

所以问题是,实际上有可能使用 1.7 版本编译 Android 模块,并使用 1.8 编译相关的 Java 模块?如果不是,那又是为什么?

更新:

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

最佳答案

Android 自 API 19 以来就可以支持 java 1.7(正如您在本 doc 中看到的那样,没有提及 java 1.8),而且它不使用 JVM,而是使用 ART 或 Dalvik,因此它生成 Dalvik bytecode .

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

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

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

阅读此 tutorial .它将您的字节码转换为与 Java 7 兼容。我之前测试过它并且它适用于我。

2016 年更新

Android N introduces support for Java 8 language features .

关于java - 使用 Java 8 模块的 Gradle Android 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com