Android Studio中如何支持使用Lambda表达式,完美解决kotlin,完美解决AS gradle:2.2.3版本问题

Java8引入了lambda表达式,Lambda 表达式”(lambda expression)是一个匿名函数,本质上就是可以传递给其他函数的一小段代码。假如你集成其他第三方的源码(极光IM,环信IM),项目中要兼容Lambda,但是又与kotlin有冲突,改如何解决,以下方法将可以解决,实战项目中操作过。

下面来看一下如何让自己的项目支持使用lambda表达式,以达到简化代码的目的。

先来举个栗子,看看我们平常写点击事件是如何写的

《一》对比

普通写法:

tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(this,"这是普通写法",Toast.LENGTH_SHORT).show());
            }
        });

Lambda表达式写法:

tv.setOnClickListener(v->Toast.makeText(this,"这是lambda表达式写法",Toast.LENGTH_SHORT).show());

是不是代码变得简洁了很多。
下面就介绍一下使用Android studio 3.0.1新建项目,配置支持Lambda表达式。
gradle android插件版本为:classpath 'com.android.tools.build:gradle:3.0.1'

《二》可能有以下三种情形

(1)集成了Kotlin环境,但项目是混合开发的,.java和.kt的代码都有。
此时,在.kt的代码中可以直接使用lambda表达式,而在java代码中,如果直接使用的话,会报如下提示
Lambda expressions are not supported at this language level
 

此时,我们只需要在app的build.gradle中的android{ }内添加如下配置即可

  compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

(2)纯Kotlin开发环境,只在Kotlin代码中使用lambda表达式

Kotlin标准库大量的使用了lambda表达式,所以在Kotlin代码中可以直接使用。只要有Kotlin环境的基本配置即可

(3)纯Java代码开发环境,没有引入Kotlin支持库。
也只需要在app的build.gradle中的android{ }内添加如下配置即可。

  compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

 综上,正常情况下,其实要支持lambda,只要添加上面compileOptions 的配置就行了。

《三》配置到我自己的项目

我也是在app.build中添加:

  compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

但是当我配置到我自己项目的时候,居然!!!出错了
(我项目的gradle插件版本是: classpath 'com.android.tools.build:gradle:2.2.3' ,项目配置了Kotlin环境,Kotlin版本是: ext.kotlin_version = '1.2.0' 的)

编译报错:Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.

解决办法:app.build中加入jackOptions 中就行了

defaultConfig {
        jackOptions {
            enabled true
        }
}

同步了一下,结果.....并没有成功!报下面的错误:
Kotlin Gradle plugin does not support the deprecated Jack toolchain.Disable Jack or revert to Kotlin Gradle plugin version 1.1.1.
(翻译的意思就是:Kotlin Gradle插件不支持不推荐使用的Jack工具链。禁用Jack或恢复到Kotlin Gradle插件版本1.1.1。)

解决方案:

(1)将Kotlin版本改成1.1.1。

(2)使用我项目中使用的方法,也是以下所述的方法

手动去添加支持lambda的插件,完整的配置为:

工程的build.gradle中添加

     dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        //classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        //java中支持lambda
        classpath 'me.tatarka:gradle-retrolambda:3.2.5'
    }

app.gradle中添加

//apply plugin: 'android-apt'
//java中支持lambda
apply plugin: 'me.tatarka.retrolambda'
android{
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}
发布了15 篇原创文章 · 获赞 2 · 访问量 8133

猜你喜欢

转载自blog.csdn.net/hzqit520/article/details/98176794