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
 16- buildscript { 
 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
 9- apply 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 表达式啦~