Android约定插件出现的错误提示

8 阅读1分钟

Task :build-logic:convention:compileKotlin FAILED.The feature "enum entries" is only available since language version 1.9

引发的原因是,在约定插件build-logic的convention模块build.gradle里,引入kotlin-dsl受到gradl版本的制约。

Gradle 9 嵌入了最新稳定版本的 Kotlin 2.2.x 运行时,并使用 Kotlin 语言版本 2.2。这标志着与 Gradle 8.x 的转变,后者从 8.11 开始嵌入 Kotlin 2.0,但为了兼容性继续使用 Kotlin 语言版本 1.8。那些使用 Kotlin DSL 进行构建定义和开发基于 Kotlin 的 Gradle 插件的开发人员现在可以访问新的语言功能,并在使用 IDE 和其他开发工具时获得更好的体验。同时,Kotlin 2 引入了许多语法和语义上的破坏性更改,因此在更新到 Gradle 9 时可能需要升级您的构建和插件。

从gradle官方文档可以看出,最新的gradle版本,已经支持到2.2.0

但如果在项目中对gradle的设置只有8.X

那gradle默认使用的kotlin语言版本有可能低于1.9.0

才会导致无法使用enum entries语言特性的情况。

因此,在开新项目,可以直接使用9.1.0的gradle版本。

对照

Gradle核心版本与Kotlin DSL

  • Gradle 8.x:对应的Kotlin DSL API级别为 Kotlin 1.8
  • Gradle 7.x:从Kotlin 1.5升级至1.7
  • Gradle 6.x:主要支持 Kotlin 1.3 至 1.4 的特性
  • Gradle 5.0:首个正式支持 Kotlin DSL 1.0 的版本

基于谷歌的NowInAndroid-build-logic项目分析