java 8安卓_Android中启用Java 8

news/2024/7/3 13:52:16

支持 Java 8 语言功能需要一个名为 Jack 的新编译。Jack 仅在 Android Studio 2.1 和更高版本上才受支持。因此,如果要使用 Java 8 语言功能,则需使用 Android Studio 2.1 开发应用。

Java8功能

targetSdkVersion>=23以下功能特性

默认和静态接口方法

Lambda 表达式(在 API 级别 23 及更低版本中也可用)

重复注解

方法引用(在 API 级别 23 及更低版本中也可用)

类型注解(在 API 级别 23 及更低版本中也可用)

Java 8 语言 API

java.lang.FunctionalInterface

java.lang.annotation.Repeatable

java.lang.reflect.Method.isDefault()

以及与重复注解关联的反映 API,例如 AnnotatedElement.getAnnotationsByType(Class)

java.util.function

java.util.stream

Jack 工具链

要使用新的 Java 8 语言功能,还需使用新的 Jack 工具链。

新的 Android 工具链将 Java 源语言编译成 Android 可读取的 Dalvik 可执行文件字节码,且有其自己的 .jack 库格式,在一个工具中提供了大多数工具链功能:重新打包、压缩、模糊化以及 Dalvik 可执行文件分包。

以下是构建 Android Dalvik 可执行文件可用的两种工具链的对比:

旧版 javac 工具链:Javac (.java → .class) → dx (.class → .dex)复制代码

新版 Jack 工具链:

Jack (.java → .jack → .dex)

启用 Java 8

要为您的项目启用 Java 8 语言功能和 Jack,请在模块级别的build.gradle 文件中输入以下内容:

android {

...

defaultConfig {

...

jackOptions {

enabled true

}

}

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}

}复制代码

已知问题

Instant Run 目前不能用于 Jack,在使用新的工具链时将被停用。

由于 Jack 在编译应用时不生成中间类文件,依赖这些文件的工具目前不能用于 Jack。下面是一些工具示例:

对类文件进行操作的 Lint 检测工具

需要应用类文件的工具和库(例如使用 JaCoCo 进行仪器测试中)

总结

java8有许多非常好的特性,特别在Android开发中配合RxJava使用Lambda 表达式非常方便,但是就目前的启用方式来说感觉问题比较多,特别是Jack工具链的使用,没有生成中间.class文件,许多需要依赖于.class的工具都不能使用,例如JaCoCo和Mockito的工具,甚至最常用的lint和ProGuard都不能使用。如果没有后续改良版本,我感觉这个java8在android上使用基本废了,和玩具没什么区别,建议不要轻易启用。


http://www.niftyadmin.cn/n/4084355.html

相关文章

js判断是否为数组的函数: isArray()

2019独角兽企业重金招聘Python工程师标准>>> 今天刚好在学习支付宝 JS 框架 base.js 。瞄了一下,实现是这样的: if (value instanceof Array ||(!(value instanceof Object) &&(Object.prototype.toString.call((value)) [object Ar…

java 输出excel_java 导出excel方法

到http://download.csdn.net/source/1781433下载jxl.jar文件/*Title是保存出来的文件名,gbl_LastOpenPath用于记录上次打开的路径*/public void ExportToExcel(JTable table, String Title){File DefaultFile;JFileChooser fc new JFileChooser();File file;if(gbl…

shell expect

ubuntu su root****************************************************expect << EOFspawn su rootexpect "密码&#xff1a;" send "$pass\r" expect eofEOF*******************************************************转载于:https://blog.51cto.com…

【ZT】SQL SERVER性能瓶頸監測

当您怀疑计算机硬件是影响SQL Server运行性能的主要原因时&#xff0c;可以通过SQL Server Performance Monitor监视相应硬件的负载&#xff0c;以证实您的猜测并找出系统瓶颈。下文将介绍一些常用的分析对象及其参数。 Memory: Page Faults / sec 如果该值偶尔走高&#xff0c…

java char int 运算符_Java - char, int conversions

小编典典第一个示例(编译)很特殊&#xff0c;因为加法的两个操作数都是文字。以下是一些定义&#xff1a;一个转换int到char被称为基本收缩转换&#xff0c;因为char是比较小的类型int。A 1是一个常量表达式。常量表达式(基本上)是一个表达式&#xff0c;其结果始终相同&#…

i18n php_国际化(I18N)

[TOC]#### 1. Yii::t() 方法可以像这样使用&#xff0c;如下所示&#xff1a;~~~//代码片段中&#xff0c;app 代表文本消息的类别echo \Yii::t(app, This is a message to translate!);~~~#### 2. 修改配置文件~~~components > [// ...i18n > [translations > [* >…

篇一、安装配置Android Studio

系统&#xff1a;Mac 10.10 Java JDK&#xff1a;官方JDK1.8 IDE&#xff1a;Android Studio 1.2 Android SDK&#xff1a;24.2 模拟器&#xff1a;genymtion 安装 Mac版本的Android Studio安装实在没有什么好讲的&#xff0c;把app拖到Application文件夹里面就好了。比Windows…

Mac上提取应用APP的LOGO

1、找到想提取LOGO的应用&#xff0c;右键「显示包内容」 2、 双击【Contents】文件夹&#xff0c;再双击【Resources】文件夹 3、双击图标打开&#xff0c;选择最清晰的一帧&#xff0c;右键【导出为】 4、选择保存位置&#xff0c;格式注意选择常见格式&#xff0c;如png