使用 Kotlin Symbol Processing 1.0 缩短 Kotlin 构建时间

使用 Kotlin Symbol Processing 1.0 缩短 Kotlin 构建时间

作者 / 软件工程师 Ting-Yuan Huang 和 Jiaxiang Chen

Kotlin Symbol Processing (KSP)——用于在 Kotlin 中构建轻量级编译器插件的全新工具现已推出稳定版本!其与 Kotlin 注解处理工具 (KAPT) 的功能相似,但速度提高了 2 倍,同时还可以直接访问 Kotlin 语言结构并支持多个平台目标。

在过去的几个月里,KSP 共发布了 32 个版本,超过 162 个来自社区反馈的错误问题被修复。如果您正期待着应用该工具,那现在是时候去尝试了。

为何要构建 KSP

在 Android 团队中,我们经常会向开发者提出这样一个问题: 就现阶段而言,开发应用时遇到的最大痛点是什么?其中出现最频繁的问题就是构建速度。多年来,我们一直在稳步优化 Android 构建工具链,现在我们非常高兴能够通过 KSP 来实现这些优化。KSP 是使用 Kotlin 进行注释处理的新一代工具: 它将大幅提高 Kotlin 开发者的构建速度,而且不同于 KAPT,该工具提供了对 Kotlin/Native 和 Kotlin/JS 的支持。

为 Room 添加 KSP 支持不仅能提升编译速度,还能让 Room 更好地理解 Kotlin 代码,比如使用 KAPT 无法实现的泛型的可空性。KSP 还解锁了如生成 Kotlin 代码等全新可能性,这让 Room 在将来会有更棒的 Kotlin 用户体验。

--Android 软件工程师 Yigit Boyar

为何 KSP 速度更快?

Kotlin 注释处理工具 (KAPT) 通过与 Java 注释处理基础架构相结合,让大部分 Java 语言注释处理器能够在 Kotlin 中开箱即用。为此,KAPT 将 Kotlin 代码编译进 Java 存根,这些存根中保留了 Java 注释处理器关注的信息。但是创建这些存根的成本很高,这意味着编译器必须多次解析程序中的所有符号 (一次生成存根,另一次完成实际编译)。

KSP 不使用存根生成模型,而是作为 Kotlin 编译器插件运行。其允许注释处理器使用 Kotlin 读取并分析源程序和资源,让您无需依赖 Java 注释处理基础架构。此举大幅提升了构建速度 (对于 Room 的 Kotlin 测试应用 而言速度提高了 2 倍),同时也意味着 KSP 可以在非 Android 以及非 JVM 环境 (如 Kotlin/Native 和 Kotlin/JS) 中使用。

开始使用 KSP

要开始使用 KSP,您可以从 GitHub 下载 KSP Playground 项目,从中您将了解如何将 KSP 用作注释处理器以及使用应用/库:

  • 注释处理器: 将构建器模式作为 KSP 处理器实现的小型 test-processor
  • 使用库: 显示如何在实际 Kotlin 项目中使用构建器处理器的 workload 目录

如果您是应用开发者,请查看 支持库列表 以及 快速入门 指南,了解如何将模块从 KAPT 转移至 KSP。

使用带 KSP 的 Moshi 或 Room

如果您在项目中使用 Moshi 或 Room,您只需快速修复模块的构建文件即可体验 KSP。例如,要在 Gradle 模块中使用 KSP 版 Room,您只需将 KAPT 插件替换为 KSP 并替换 KSP 依赖项:

您可以查看 Room 版本说明 以了解更多信息。

最后

通过使用 KSP 1.0 版,您可以发现 Kotlin 项目的构建速度得到了提升,因为您将不再使用基于 KAPT 的库。同时,我们也更新了一些特定的 Android 库,您可以立即尝试,体验改进后的强大性能。也欢迎您持续关注官方微信公众账号,随时获取最新资讯。

欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

版权声明

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

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io Funder | 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.
🍗