查看原文
其他

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

Android Android 开发者 2021-10-19

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

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


  • Kotlin Symbol Processing (KSP)
    https://github.com/google/ksp

  • KAPT
    https://kotlinlang.org/docs/reference/kapt.html


在过去的几个月里,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 注释处理器关注的信息。但是创建这些存根的成本很高,这意味着编译器必须多次解析程序中的所有符号 (一次生成存根,另一次完成实际编译)。

  • KAPT
    https://kotlinlang.org/docs/reference/kapt.html

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


  • Kotlin 测试应用

    https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:room/integration-tests/kotlintestapp/



开始使用 KSP


要开始使用 KSP,您可以从 GitHub 下载 KSP Playground 项目,从中您将了解如何将 KSP 用作注释处理器以及使用应用/库:
  • 注释处理器: 将构建器模式作为 KSP 处理器实现的小型 test-processor

  • 使用库: 显示如何在实际 Kotlin 项目中使用构建器处理器的 workload 目录


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

  • KSP Playground 项目

    https://github.com/google/ksp/releases/download/1.5.30-1.0.0/artifacts.zip

  • 支持库列表
    https://github.com/google/ksp#supported-libraries
  • 快速入门

    https://github.com/google/ksp/blob/main/docs/quickstart.md



使用带 KSP 的 Moshi 或 Room


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

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


  • Room 版本说明
    https://developer.android.google.cn/jetpack/androidx/releases/room#2.3.0-beta02


最后


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


欢迎您通过下方二维码向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!






免费中文系列课程下载

系统地学习使用 Kotlin 进行 Android 开发


☟ 即刻了解课程详情 ☟




推荐阅读

如页面未加载,请刷新重试

 点击屏末 | 阅读原文 | 即刻获取快速入门指南




视频 小程序 ,轻点两下取消赞 在看 ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存