Android BUG 之 Invoke-customs are only supported starting with Android O (--min-api 26)

前言

当在 Github 上下载导入项目时, 编译通过但代码爆红,如下,很明显是 Lambda 表达式 出现了问题

Android BUG 之 Invoke-customs are only supported starting with Android O (--min-api 26)_第1张图片

这个错误是因为你在使用 Lambda 表达式或方法引用时,没有在build.gradle文件中正确配置 Java版本和 minSdkVersion。对于 Lambda 表达式和方法引用,需要在 gradle中设置Java 8兼容性。

 

一、Lambda 表达式 是什么?

Lambda 表达式本质是一种匿名方法,它既没有方法名,也没有访问修饰符和返回值类型,用它来写代码更简洁,更易懂。使得开发者可以更方便地编写函数式接口。在Android中,Lambda表达式可以帮助我们更简洁地编写监听器、回调函数等,提高代码可读性和开发效率。以下是简单的阐述下Lambda表达式在Android中的使用方法:

1.使用Lambda表达式替代接口实现类

传统的接口实现类可能会让代码变得冗长,而Lambda表达式可以帮助我们更简洁地实现监听器和回调函数。例如,在Android中设置Button的点击事件时,传统的写法如下:

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 点击事件处理逻辑
    }
});

使用Lambda表达式可以将代码简化为以下形式:

Button button = findViewById(R.id.button);
button.setOnClickListener((View v) -> {
    // 点击事件处理逻辑
});

2 使用Lambda表达式遍历集合

在遍历集合时,传统的写法可能会让代码变得冗长。使用Lambda表达式可以帮助我们更简洁地遍历集合。例如,在Android中遍历List时,传统的写法如下:

List list = new ArrayList<>();
for (String item : list) {
    // item处理逻辑
}

使用Lambda表达式可以将代码简化为以下形式:

List list = new ArrayList<>();
list.forEach(item -> {
    // item处理逻辑
});

二、解决

1.在 App 下的 build.gradle文件中添加以下配置:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        minSdkVersion 26 // 设置你的minSdkVersion
        // ...
    }
    // ...
}

2.如果你使用的是Kotlin,需要在build.gradle文件中添加以下配置:

androidExtensions {
    experimental = true
}

3.如果你使用的是Android Studio 3.0或更高版本,可以使用以下方法:

  • 打开build.gradle文件,在右上角选择"Open for Editing in Android Studio"。
  • 在打开的文件中,点击"File"菜单,选择"Project Structure"。
  • 在左侧菜单中选择"app",然后选择"Properties"选项卡。
  • 在该页面中,选择"Use Latest Platform"选项。

总结

这些方法中,第一种方法是最常用的,并且适用于大多数情况。注意,Lambda表达式只能在Java 8及以上版本中使用,如果你的项目使用的是更低的Java版本,需要先升级Java版本。。

你可能感兴趣的:(BUG,bug)