build.gradle.kts 的构建脚本的 android.compileOptions 闭包中通常有 isCoreLibraryDesugaringEnabled 这个配置参数,表示核心库是否进行脱糖;

Desugaring

中文意思:脱糖

因为不同的Android版本支持的 Jvm 不同,当 Android 版本不支持高版本的语法时,就需要在编译期间将其转换为低版本支持的语法,这个过程称为 脱糖 Desugaring

如果在高版本使用新引入的类,没有脱糖就放到低版本中使用,低版本会出现 NoClassDefFoundError 异常;

Android与Java版本对应

Android版本

Sdk版本

Jdk版本

4.4及之前

19及之前

9

5.0 ~ 6.0

21 ~ 23

7

7.0~11.0

24~30

8

12~14

31~34

11

isCoreLibraryDesugaringEnabled

如果想要消除版本的限制,比如在低版本的机子上运行的应用能使用较高版本的 Jdk 语法,就需要开启该功能;

Android Studio 4.0 后引进

android {
	compileOptions {
		// ...
        isCoreLibraryDesugaringEnabled = true
    }
}

开启该功能的同时,还需要依赖对应的库,否则会出现下面的错误:

coreLibraryDesugaring configuration contains no dependencies.
If you intend to enable core library desugaring, please add dependencies to coreLibraryDesugaring configuration.

需要进行依赖:

[versions]
androidDesugarJdkLibs = "2.0.4"

[libraries]
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" }

使用 coreLibraryDesugaring 进行依赖:

dependencies {
	coreLibraryDesugaring(libs.android.desugarJdkLibs)
}