查看原文
其他

Kotlin Symbol Processing (KSP) Alpha 版现已发布

Android 谷歌开发者 2021-08-05

作者 / 软件工程师 Ting-Yuan Huang 和产品经理 David Winer


我们很高兴地向您介绍 Kotlin Symbol Processing (KSP) 的 Alpha 版,帮助您在 Kotlin 中构建轻量级编译器插件的全新工具。KSP 提供的功能类似于 KAPT,但速度提高了 2 倍,可以直接访问 Kotlin 编译器功能,并且开发时充分考虑到了多平台兼容性。

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


KSP 兼容 Kotlin 1.4.30 及更高版本。您可以在 KSP GitHub repo 中查看开放源代码和文档。

  • KSP GitHub repo
    https://github.com/google/ksp



为何推出 KSP?


Kotlin 开发者向我们反馈最多的需求就是提高构建速度。许多开发者每天都要迭代并部署数十次应用,所以构建速度缓慢会使开发者不得不将大量时间耗费在等待上。编译 Kotlin 代码的最大挑战之一是 Kotlin 没有原生注释处理系统。诸如 Room 等注释处理器在 Android 平台无处不在,它们依赖于通过 Kotlin 注释处理工具 (KAPT) 实现的 Java 注释处理兼容性。但是,KAPT 的运行速度可能会很慢,因为它需要生成中间的 Java 存根,然后 Java 注释处理系统才能对其进行提取。


  • Room

    https://developer.android.google.cn/training/data-storage/room


在设计 KSP 时,我们考虑了如果从头开始构建,Kotlin 的注释处理应是怎样的形式。KSP 提供了一个功能强大且简单的 API,它可以直接解析 Kotlin 代码,因此大大降低了 KAPT 生成存根所带来的构建速度负担。实际上,利用 Room 库执行的初始基准测试表明,KSP 相比 KAPT 速度提高了 2 倍左右。


开始使用


要查看 KSP 的实际运行情况,请从 GitHub 下载 KSP Playground 项目。您可以从中获得:

  • : 将构建器模式作为 KSP 处理器实现的小型 test-processor 库

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


  • KSP Playground 项目
    https://github.com/google/ksp/releases/download/1.4.30-1.0.0-alpha02/playground.zip


实现构建器的所有逻辑全部位于 test-processor 中 - 对于使用者 (workload) 来说,使用 KAPT 和使用 KSP 的唯一区别是更改了两行构建文件:

这是 KSP 的目标: 大多数 Android 应用开发者无需担心其内部结构;除了这一行更改以外,支持 KSP 的库类似于普通的注释处理器,而速度却提高了 2 倍。也就是说,在同一模块中使用 KAPT 和 KSP 最初可能会降低您的构建速度,因此在 Alpha 版期间,最好在单独的模块中使用 KSP 和 KAPT。


随着越来越多的注释处理器采用 KSP,我们希望您的大多数模块都能够使用 KSP 来直接替代 KAPT。现在,您可以在表格中查看哪些注释处理器提供了 KSP 支持。如果表中缺少已支持或正在实现 KSP 支持的库,请将您的宝贵建议反馈给我们!


  • 表格
    https://github.com/google/ksp#supported-libraries


如果您是当前某个使用注释处理的库作者,可以在快速入门和 README 指南中找到有关如何使您的库与 KSP 兼容的更多信息。

  • 快速入门
    https://github.com/google/ksp/blob/master/docs/quickstart.md
  • README
    https://github.com/google/ksp#how-ksp-looks-at-source-files


对于库作者而言,KSP 目前所处的 Alpha 版阶段是对其深入研究的良好契机,欢迎您在 KSP 问题跟踪器中向我们提供有关 API 的反馈。此外,我们会在谷歌开发者公众号和 Kotlin Slack 的 #ksp 频道上定期发布版本动态。自去年 6 月的开发者预览版发布以来,我们已经解决了超过 100 项错误和问题,其中数十项都来自优秀的 Kotlin 库开发者社区的反馈。希望您可以继续将问题通过 KSP 问题跟踪器反馈给我们,或在文章下方进行留言。


  • KSP 问题跟踪器
    https://github.com/google/ksp/issues
  • Kotlin Slack
    https://surveys.jetbrains.com/s3/kotlin-slack-sign-up


Java 是 Oracle 和/或其附属公司的注册商标。


推荐阅读






 点击屏末 | 阅读原文 | 即刻访问 Android 官方中文文档



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

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