想要在Android中使用java8的lambda语法, 使用官方方法需要准备:
- Android Studio 2.1 以上
- 启用 Jack 编译
不过这个 Jack 编译会带来一些问题,例如,不能用 Instant Run,使用butternife或dagger时会出现问题
jackoption和butternife冲突,
jack: .java -> .jack -> .dex
java: javac(.java->.class) dx(.class -> .dex)
butternife的原理是使用反射找到注解对象, 当jackoptions enable时,不产生.class类,无法使用反射
解决方案:
在Project的build.gradle文件中添加step1,2,3
buildscript {
repositories {
jcenter()
// step1
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// step2
classpath 'me.tatarka:gradle-retrolambda:3.4.0'
}
}
allprojects {
repositories {
jcenter()
//step3
mavenCentral()
}
}
Module的build.gradle: step1,2,3
apply plugin: 'com.android.application'
// step1
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
//...
// step2
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compile 'com.android.support:appcompat-v7:25.0.0'
// step3
compile 'me.tatarka:gradle-retrolambda:3.4.0'
}
Github: https://github.com/evant/gradle-retrolambda
Android中使用java8的Stream 官方方法的限制是必须使用在安卓24以上, 显然不行, 非官方的兼容库, 做法如下:
dependencies {
...
compile 'com.annimon:stream:1.1.9'
}