Android Studio支持Java8方法

方法一(项目无apt插件)

在需要支持的module内添加

    //支持Java8
    defaultConfig.jackOptions.enabled = true
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

例如

android {
    compileSdkVersion 26
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.liompei.retrofitdemo"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //支持Java8
    defaultConfig.jackOptions.enabled = true
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
}

然后就可以使用Lambda表达式了

但是但是,开启jack编译后,不能使用apt插件了,就是这句话
defaultConfig.jackOptions.enabled = true
如果你的项目需要使用apt插件,同时又想使用Lambda表达式,可以使用下面一种方法(推荐)

方法二(项目有apt插件)

gradle-retrolambda
(最新版本可查看gradle-retrolambda的github链接)

打开Project的build.gradle,添加
classpath 'me.tatarka:gradle-retrolambda:3.6.1'

例如

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
//        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'me.tatarka:gradle-retrolambda:3.6.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
//        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
下一步,打开要使用Lambda表达式Module的build.gradle

添加

apply plugin: 'me.tatarka.retrolambda'

    //支持Java8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

例如

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
    compileSdkVersion 26
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "com.liompei.retrofitdemo"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //支持Java8
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

这样就可以使用Lambda表达式了,同时可以使用apt插件

测试

        //点击事件
        findViewById(R.id.btn).setOnClickListener(view -> mTextView.setText("Hello"));
        //RxJava2
        Flowable.just("Hello world").subscribe(System.out::println);

关于Java8,建议看看这篇文章
在Android项目中使用Java8

    原文作者:贝黎明
    原文地址: https://www.jianshu.com/p/84126a1fd15a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞