Android Studio中使用java8

想要在Android中使用java8的lambda语法, 使用官方方法需要准备:

  1. Android Studio 2.1 以上
  2. 启用 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'
}

Github地址: https://github.com/aNNiMON/Lightweight-Stream-API

你可能感兴趣的:(Android Studio中使用java8)