Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难免会引入不可预知的问题,目前我个人也只是玩玩而已,并未在项目中使用。
目前在项目中尝试使用的是Github上的retrolambda,基于它有人开发了gradle plugin,使用起来更方便,目前最新版本3.4.0,支持Android gradle plugin 1.5.0+。
retrolambda不仅支持Java 8 的lambda表达式,还支持Method References和其它我们怎么用过的几项特性(┑( ̄Д  ̄)┍),详见backported-language-features
在Android项目中使用时确保本地安装Java版本为Java 8
然后在project build.gradle中修改如下
repositories {
mavenCentral()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.4.0'
}
在module build.gradle中修改如下
#add
apply plugin: 'me.tatarka.retrolambda'
android {
#add in android
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
然后 sync
,rebuild project
。
Done!
此时回到项目中看一下,AS应该已经提示有提示了。
使用lambda表达式替换以后,原先的代码会精简很多,如果项目中刚好使用了RxJava,那代码绝对简洁明快。
当然,由于并非官方支持,使用retrolambda时难免会踩坑,遇到问题,
Go ⬇️
https://github.com/orfjackal/retrolambda
https://github.com/evant/gradle-retrolambda