想要在Android中使用java8的lambda語法, 使用官方方法需要準(zhǔn)備:
- Android Studio 2.1 以上
- 啟用 Jack 編譯
不過這個 Jack 編譯會帶來一些問題,例如糯耍,不能用 Instant Run,使用butternife或dagger時會出現(xiàn)問題
jackoption和butternife沖突忧陪,
jack: .java -> .jack -> .dex
java: javac(.java->.class) dx(.class -> .dex)
butternife的原理是使用反射找到注解對象抓谴, 當(dāng)jackoptions enable時,不產(chǎn)生.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'
}