Lambda 表达式是 Java 8 的新特性之一,本文主要介绍如何让 Android 项目集成 Labmda 表达式功能。
已知的集成方式有两种:
- 使用官方的 Jack 工具链 启用Java 8 功能
- 使用第三方库 Retrolambda 启用 Java 8功能
在本人使用过程中发现,通过 Jack 集成的方式,存在一些问题(不仅仅是官方声明的问题),所以在这里 推荐使用 Retrolambda 来集成 Lambda 功能。
2017-06-05 更新: 通过在不同的SDK版本上测试发现,Android M (api 23)以下版本中,不论是 Jack 还是 Retrolambda 的集成方式均会偶现 NoClassDefFoundError,并都没有成型的解决方案,所以以下诸君看看便可,不太能付诸实际项目中~ :(
官方Jack集成
在模块级别的 build.gradle 中配置:
1 | android { |
当然你首先得有 JDK 8 的开发环境。
第三方Retrolambda集成
因为 Android Studio 使用 Gradle 作为构建工具,所以我们需要在集成 gradle-retrolambda Gradle 插件:
下载安装 JDK 8
在项目级别(项目根目录)的 build.gradle 中加入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16buildscript {
repositories {
...
mavenCentral() // 加入 mavenCentral
}
dependencies {
...
classpath 'me.tatarka:gradle-retrolambda:3.6.1' // 将retrolambda加入classpath
}
}
allProjects {
repositories {
...
mavenCentral() // 加入 mavenCentral
}
}在模块级别的 build.gradle 中加入:
1
2
3
4
5
6
7
8
9apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' // 引入 retrolambda 插件
android {
...
compileOptions { // 使用 Java 8 进行编译
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}在混淆文件中加入
1
2-dontwarn java.lang.invoke.*
-dontwarn **$$Lambda$*
之后就可以愉快的使用 Lambda 表达式啦~