Android Studio中如何支持使用Lambda表达式

简介: Java8引入了lambda表达式,Lambda 表达式”(lambda expression)是一个匿名函数,本质上就是可以传递给其他函数的一小段代码。

Java8引入了lambda表达式,Lambda 表达式”(lambda expression)是一个匿名函数,本质上就是可以传递给其他函数的一小段代码。

下面来看一下如何让自己的项目支持使用lambda表达式,以达到简化代码的目的。
先来举个栗子,看看我们平常写点击事件是如何写的

普通写法:
  tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                  //处理逻辑
            }
        });
Lambda表达式写法
  tv.setOnClickListener(v->Toast.makeText(this,"this is 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


img_6a83ae66f80a9e0b0bb1f17ca2c5ded9.png
image.png

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

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
(2)纯Kotlin开发环境,只在Kotlin代码中使用lambda表达式

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

 button.setOnClickListener { v -> Toast.makeText(applicationContext,"this is lambda",Toast.LENGTH_SHORT).show() }
(3)纯Java代码开发环境,没有引入Kotlin支持库。

也只需要在app的build.gradle中的android{ }内添加如下配置即可。

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }

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

配置到我自己的项目

我也是在app.build中添加:

    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }

很简单吧,但是当我配置到我自己项目的时候,居然!!!出错了.......竟然如此尴尬......
(我项目的gradle插件版本是: classpath 'com.android.tools.build:gradle:2.2.2' ,项目配置了Kotlin环境,Kotlin版本是: ext.kotlin_version = '1.2.10' 的)


img_3e7fb337001e74c4eb7423e0d58b65e1.png
image.png

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

img_c249374a78f973dcc608b76a3da9c4a9.png
image.png

于是我搜索了一下 解决办法,说是在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.


img_139ebf598e69ed574ae47ebea433669b.png
image.png

遇到这种工程构建的错误,确实是挺烦人的,但是大家一定要有耐心,仔细查错,不要着急。
按照上面提示:Kotlin版本不支持配置jackOptions ,要我把版本Kotlin改成1.1.1。OK,那就把Kotlin版本改成1.1.1咯,同步一下,OK。但是发现这样的方式,导致项目构建很慢,于是乎又找了另外一种方法配置。

简单一步到位的配置支持Lambda

针对我的项目从头开始,手动去添加支持lambda的插件,也是OK的,这样一步到位,不会出错,完整的配置为:
工程的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
    }
}

搞定!!!(android-apt插件可配可不配都行)

相关文章
|
2月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
143 1
|
8天前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
67 2
|
1月前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
54 5
|
2月前
|
Dart Android开发
Android Studio New里面没有New Flutter Project
Android Studio New里面没有New Flutter Project
120 1
Android Studio New里面没有New Flutter Project
|
2月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
42 1
|
2月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
615 0
Android Studio: 解决Gradle sync failed 错误
|
2月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
57 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
2月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
67 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
2月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
158 4
|
2月前
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置