Android 开发使用 Java 8 中Lambda 表达式功能

时间:2021-07-21 22:11:21

简介

Android开发支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异)。

注意:在开发应用时,可以选择使用 Java 8 语言功能。您可以将项目的源和目标兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。

  本文主要是对Android中使用Java8中Lambda 表达式功能进行说明。如果想了解更多关于Android中对Java 8 语言功能的支持请查看官方文档。要在 Android 的较早版本中测试 Lambda 表达式,需要将项目中的的 build.gradle 文件中将 compileSdkVersion 和 targetSdkVersion 设置为 23 或更低。

开启Lambda的方式

方式一:
  使用新的 Jack 工具链,支持 Java 8 语言功能需要一个名为 Jack的新编译。Jack 仅在 Android Studio 2.1 和Android Studio 2.3上才受支持。关注官方文档后发现正在开发的AndroidStudio 3.0版本中会默认支持Java 8 语言功能,详情见 这里
  
在Android工程中(Moudle)的build.gradle 文件中配置如下:
  

android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

!注意:开启Jack后会出现以下情况

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

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

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

方式二:

使用开源库 Gradle Retrolambda Plugin 配置如下:

步骤一 打开项目(Project)的build.gradle,在dependencies节点添加

 classpath 'me.tatarka:gradle-retrolambda:3.7.0'

添加后如下:

buildscript {
repositories {
mavenCentral()
}

dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.7.0'
}
...
}

步骤二

在项目(Module)的build.gradle 的根节点添加

apply plugin: 'me.tatarka.retrolambda'

android节点增加

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

添加完成如下:

apply plugin: 'com.android.application' 
apply plugin: 'me.tatarka.retrolambda'
...
android {
...
defaultConfig {
...
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

使用前后的对比如下:

Android 开发使用 Java 8 中Lambda 表达式功能

需要注意的出现Lambda格式要么对其很熟悉直接键入或者按照原来的方式键入后通过提示快捷键自动转换生成。