【问题标题】:isCoreLibraryDesugaringEnabled not works in gradle kotlin dsl / ktsisCoreLibraryDesugaringEnabled 在 gradle kotlin dsl / kts 中不起作用
【发布时间】:2020-12-26 14:11:13
【问题描述】:

要在我们的 android-library 模块中启用脱糖,我们必须将其放入 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-kotlin-dsl gradle-kts


    【解决方案1】:

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

    isCoreLibraryDesugaringEnabled = true
    

    对于之前的版本,使用:

    coreLibraryDesugaringEnabled = true
    

    【讨论】:

    • 如果你使用coreLibraryDesugaringEnabled = true ,那么对于4.0版,编译器会说Unresolved reference: coreLibraryDesugaringEnabled
    【解决方案2】:

    当我切换到较新的 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")

    【讨论】:

    • 对。对我来说,将构建工具设置为 4.0.1 并将 gradle 版本设置为 gradle-6.1.1-all.zip 有效。谢谢。
    • 由于4.0.1,我也使用coreLib...而不是isCoreLib...,而且我不得不更改kotlin版本(由于我的案例中的一些其他jetifier错误)以及更新和兼容的版本.所以不得不改变一堆东西。我正在建立几个月前的项目,所以面临这些错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多