Kotlin DSL 现已成为全新 Gradle 构建的默认设置

Kotlin DSL 现已成为全新 Gradle 构建的默认设置

作者 / Kotlin 产品经理 James Ward、开发者关系工程师 Boris Farber

四年来,Android 一直贯彻 "Kotlin 优先" 的原则,许多 Android 开发者已经做出了改变,陆续推出了效率更高、性能更稳定的应用。然而,尽管 Kotlin (build.gradle.kts) 语言已经在 Gradle 中存在多年,但定义构建的默认语言一直是 Groovy (build.gradle)。

现在,我们非常高兴地宣布将把构建脚本的默认语言切换为 Kotlin!这意味着 Kotlin 是所有项目代码的唯一默认语言,包括利用 Jetpack Compose 开发的用户界面,以及最新支持的构建脚本!在我们与 Gradle 和 JetBrains 团队的不懈努力下,终于为您带来这项改进。了解更多详情,您可以参阅相关公告: Gradle 博客JetBrains 博客

这项改进不会影响使用 Groovy 语言的现有项目。这些项目将继续正常运行,暂无任何弃用计划。但如果您通过 Android Studio Giraffe 开始创建新项目或新模块,则将默认使用 Kotlin DSL。利用经过更新的项目模板,您可使用新的 Kotlin DSL 构建脚本轻松上手。如要迁移现有构建,您可以查看 Kotlin DSL 迁移指南

虽然 Kotlin DSL 是创建新项目时的默认语言,但基于 Groovy DSL 的大型现有项目的迁移工作不可操之过急。Gradle、JetBrains 和 Google 正致力于进一步提高构建性能。这项工作正在进行中,我们将在取得进展时与您分享最新动态。具体而言,Kotlin DSL 的脚本编译性能慢于 Groovy DSL。然而,与 Groovy DSL 不同的是,Kotlin DSL 脚本编译结果存储在 Gradle 本地和远程缓存中,因此您无需在后续构建过程中重新编译。

推出这一改进有很多好处,为项目中的所有代码使用单一语言只是其中之一,让我们来看看使用 Kotlin DSL 构建 Gradle 的其他优势。

  • Kotlin 是静态类型语言,因此您在编辑 Kotlin DSL 构建脚本时可以获得快速而准确的代码提示:

  • 检查语法错误功能更准确,且系统会在您编辑 Kotlin DSL 构建脚本时显示语法错误,而不是在尝试同步项目时显示:

  • 按下 Control+Q (如果使用 macOS,则为 Command+B) 即可获取类型和方法文档。如果您需要更多详细信息,则可通过按下 Control 并单击鼠标左键 (如果使用 macOS,则是按下 Command 并单击鼠标左键) 转到底层源代码:

  • 您可以在一个项目中混合使用 Groovy DSL 构建脚本和 Kotlin DSL 构建脚本,然后逐个模块进行迁移。您可借助此功能为新模块启用 Kotlin DSL,同时保留使用 Groovy 的现有模块。

我们还对新的项目模板进行了相关更改。这是一个实验性功能,可以支持您搭配使用 Gradle 版本目录 与 Kotlin DSL 构建脚本。

借助版本目录,您可使用集中化、可扩展的方式来定义项目的依赖项。虽然我们并不强制要求您使用版本目录,但其可在构建定义中提供更多类型安全性,是 Kotlin DSL 的完美搭档。

您可以查看《迁移指南》,了解关于迁移到版本目录的更多信息。

新推出的 Kotlin DSL 默认更改现已可在 Android Studio Giraffe 预览版 中使用。欢迎您即刻试用并 与我们分享您的使用感受!也欢迎您持续我们,及时了解更多开发技术和产品更新等资讯动态。

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io WebMaster | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.