isCoreLibraryDesugaringEnabled在Gradle Kotlin DSL / KTS中不起作用

问题描述

要在我们的android-library模块中启用desugaring,必须将其放在build.gradle中:

android {
  compileOptions {
    coreLibraryDesugaringEnabled true
  }
}

但是我们已经将所有脚本迁移到了gradle kotlin dsl,因此问题在build.gradle.kts中以三种方式发生:

android {
    compileOptions {
        iscoreLibraryDesugaringEnabled = true
    }
}
configure<BaseExtension> {
    compileOptions {
        iscoreLibraryDesugaringEnabled = true
    }
}
android {
    if (this is com.android.build.api.dsl.LibraryExtension<*,*,*>) {
        buildFeatures.viewBinding = true
    }
}

每次都抛出Unresolved reference: iscoreLibraryDesugaringEnabled

有人知道如何解决此问题吗?

解决方法

如果您使用的是Android Gradle插件版本> = 4.1,请使用:

isCoreLibraryDesugaringEnabled = true

对于之前的版本,请使用:

coreLibraryDesugaringEnabled = true
,

从理论上讲,当我切换到更新的android插件版本(4.1.0-rc02)时,它会起作用。 IDE说这是错误的语法,但在编译过程中可以使用。

if (this is com.android.build.api.dsl.LibraryExtension<*,*,*>) {
    compileOptions.isCoreLibraryDesugaringEnabled = true
}

但是,这不是理想的解决方案

-----最终解决方案-----

解决方案类似于How to exclude (ignore) android build variants in gradle kts

由于顶层build.gradle.kts的这一行缺少行而无法正常工作:

classpath("com.android.tools.build:gradle:4.0.1")