首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java 8模块分级Android项目

用Java 8模块分级Android项目
EN

Stack Overflow用户
提问于 2015-06-04 19:29:51
回答 1查看 5.1K关注 0票数 7

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

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

代码语言:javascript
复制
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}

但是,如果我试图将Java模块的Java更改为

代码语言:javascript
复制
compileJava {
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
}

我得到以下错误:

代码语言:javascript
复制
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模块是否可能呢?如果没有,那为什么呢?

更新:

雷特朗巴 for Gradle (由@Saeed提到)很好,但是它们只支持lambda,所以不能访问Stream APIDateTime API和其他特性。想象一下,如果*.jar文件是用Java 8构建的(没有Android代码)。我认为我们不能将这样的*.jar文件用作Android模块的依赖项,因为它的字节码将不被ARTDalvik所支持,而只被JVM用于Java 8

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-04 21:06:21

因为API 19 (正如您在这个文档中没有提到java1.8),Android可以支持Java1.7,而且它也不使用JVM,而是使用ART或Dalvik,所以它生成了Dalvik字节码

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

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

代码语言:javascript
复制
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

阅读此教程 .It转换您的字节码,使其与java 7兼容。我以前对此进行过测试,它适用于我。

更新2016年

安卓N 介绍对Java 8语言特性的支持.

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30652528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档