使用 Java 8 语言功能
- 使用 Java 8 语言功能
本文内容:
支持的 Java 8 语言功能和 API
启用 Java 8 功能和 Jack 工具链
配置 Gradle
已知问题
Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异)。本页介绍您可以使用的新语言功能、如何正确配置项目以使用这些功能,以及您可能遇到的任何已知问题。注:在为 Android 开发应用时,可以选择使用 Java 8 语言功能。您可以将项目的源和目标兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。
支持 Java 8 语言功能需要一个名为 Jack 的新编译。Jack 仅在 Android Studio 2.1 和更高版本上才受支持。因此,如果要使用 Java 8 语言功能,则需使用 Android Studio 2.1 开发应用。
如果您已经安装了 Android Studio,请通过点击 Help > Check for Update(在 Mac 上,点击 Android Studio > Check for Updates)来确保您已更新到最新版本。如果您的工作站尚未安装 IDE,可在此下载 Android Studio。
支持的 Java 8 语言功能和 API
Android 并非支持所有 Java 8 语言功能。不过,以下功能在开发面向 Android 7.0(API 级别 24)的应用时可用:默认和静态接口方法
Lambda 表达式(在 API 级别 23 及更低版本中也可用)
重复注解
方法引用(在 API 级别 23 及更低版本中也可用)
类型注解(在 API 级别 23 及更低版本中也可用)
注:类型注解信息仅在编译时可用,而在运行时不可用。要在 Android 的较早版本中测试 Lambda 表达式、方法引用和类型注解,请前往您的 build.gradle 文件,将 compileSdkVersion 和 targetSdkVersion 设置为 23 或更低。您仍需要启用 Jack 工具链以使用这些 Java 8 功能。
此外,也可使用以下 Java 8 语言 API:
反映和语言相关 API:
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.Method.isDefault()
以及与重复注解关联的反映 API,例如 AnnotatedElement.getAnnotationsByType(Class)
实用程序 API:
java.util.function
java.util.stream
启用 Java 8 功能和 Jack 工具链
要使用新的 Java 8 语言功能,还需使用新的 Jack 工具链。新的 Android 工具链将 Java 源语言编译成 Android 可读取的 Dalvik 可执行文件字节码,且有其自己的 .jack 库格式,在一个工具中提供了大多数工具链功能:重新打包、压缩、模糊化以及 Dalvik 可执行文件分包。以下是构建 Android Dalvik 可执行文件可用的两种工具链的对比:
旧版 javac 工具链:
javac (.java → .class) → dx (.class → .dex)
新版 Jack 工具链:
Jack (.java → .jack → .dex)
配置 Gradle
要为您的项目启用 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 进行仪器测试中)
使用 Java 8 语言功能相关推荐
- nutshell_Nutshell中的Java 8语言功能-第1部分
nutshell 你好朋友, Java 8发布已经很长时间了,现在越来越多地被使用. 在本文中,我们将讨论以下Java 8主题. 1.功能接口 2.Lambda表达式 3.默认方法 1.功能界面 什么 ...
- nutshell_Nutshell中的Java 8语言功能-第2部分
nutshell 编者注:您也可以在此处检查Part-1. 嗨,朋友,这是简明系列的Java 8语言功能的第2部分. 在这里,我们将讨论Java 8的以下功能: 接口中的静态方法 流 1.接口中的静态 ...
- Nutshell中的Java 8语言功能-第2部分
编者注:您也可以在此处检查Part-1. 嗨,朋友们,这是简明系列的Java 8语言功能的第2部分. 在这里,我们将讨论Java 8的以下功能: 接口中的静态方法 流 1.接口中的静态方法 什么是静态 ...
- Nutshell中的Java 8语言功能-第1部分
你好朋友, Java 8发布已经很长时间了,现在越来越多地被使用. 在本文中,我们将讨论以下Java 8主题. 1.功能接口 2,Lambda表达式 3.默认方法 1.功能界面 什么是功能接口? 与一 ...
- 是否可以将Java 8用于Android开发?
本文翻译自:Is it possible to use Java 8 for Android development? Searching the web, it is not clear if Ja ...
- java框架2019_Java回顾#2 – 2019年最佳工具,框架和功能
java框架2019 哪种Java工具,框架和/或功能在2019年让您感到振奋,为什么? 绝对是夸克. 社区开发了一个很棒的工具,可以优化JVM甚至GraalVM本机映像的通用Java范例–这影响了Q ...
- Java之Java特点
1.简单 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了.Java语言的简单性主要体现在以下三个方面: Java的风格类似于C++,因而C++程序员是非常熟悉的.从某种意义 ...
- Java产生的历史与现状
1.1.1Java的现状 Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发,它的平台无关性直接威胁到Wintel的垄断地位.一时间,"连Inte ...
- Java语言的出现背景、主要特点、发展历程以及Java技术的应用
一. Java的由来 当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引.那么Java到底有何神奇之处呢? Java语言其实最是诞生于1991年,起初被称为OAK语言,是SU ...
最新文章
- [架构设计]反向(或者后向)插件系统设计
- git id 切分支 按_Git分支本地操作详解
- eclipse 设置 content type 编码格式
- 【python数据挖掘课程】十三.WordCloud词云配置过程及词频分析
- Eclipse自动代码补全
- caffe安装 cuda安装 opencv安装 cudnn安装 python相关依赖库安装
- python生成器函数_Python 编写生成器函数
- Modbus PLC攻击分析:Python和Mbtget读写PLC
- DIY01_NE555叮咚门铃
- c语言同构数循环,C语言求同构数.pdf
- vue调整图标的大小_Vuetify图标大小
- WIN10笔记本任务栏无反应(卡住)有效解决方法
- 桥本分数式(用递归法实现全排列)
- 【笔记】Android APP 上架 Google Play 采坑记之「应用签名证书」
- 悟空浏览器——青龙羊毛
- 最通俗的运维开发工程师招聘解析
- 2021年软考考核方式
- 四、完成Teigha.net库对CAD看图的放大/缩小/移动实体等界面操作,图层管理器,以及CAD文件布局的切换功能
- Hide column
- Linux 中 dlopen、dlsym、dlclose、dlerror函数