在 build.gradle.kts 的构建脚本的 android.compileOptions 闭包中通常有 isCoreLibraryDesugaringEnabled 这个配置参数,表示核心库是否进行脱糖;
Desugaring
中文意思:脱糖
因为不同的Android版本支持的 Jvm 不同,当 Android 版本不支持高版本的语法时,就需要在编译期间将其转换为低版本支持的语法,这个过程称为 脱糖 Desugaring
如果在高版本使用新引入的类,没有脱糖就放到低版本中使用,低版本会出现 NoClassDefFoundError 异常;
Android与Java版本对应
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)
}