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

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

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

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

为何推出 KSP?

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

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

开始使用

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

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

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

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

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

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

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

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


Android_开发者
Android 最新开发技术更新,包括 Kotlin、Android Studio、Jetpack 和 Android 最新系统技术特性分享。

Android 最新开发技术更新,包括 Kotlin、Android Studio、Jetpack 和 Android 最新系统技术特性分享。...

389 声望
2k 粉丝
0 条评论
推荐阅读
官方零基础入门 Jetpack Compose 的中文课程来啦!
在 Android 平台上开发应用蕴藏着许多激动人心的机会: 您可以就此开始一段新的职业生涯,或者以有趣的方式表达自己,也可以创造一个与众不同的应用,甚至能够开启一段创业旅程。

Android开发者阅读 828

封面图
如何用3D流体实现逼真水流效果?
华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。

HMSCore1阅读 2k

Android桌面图标快捷方式
长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。 

xiangzhihong2阅读 590

2022 年终总结|致敬即将过去的,匆忙而又虐心的一年...
本文参与了 SegmentFault 思否年度征文「一名技术人的 2022」,欢迎正在阅读的你也加入。 时间,总是过的这么快,快得让人猝不及防,眨眼又是一年的末...似乎儿时的文章中,对于时间的流逝,描述的最多的便是:白...

贺biubiu1阅读 1.1k

封面图
安卓逆向之破解某成人APP播放次数限制
某成人水果APP非VIP用户存在播放次数限制,每天只能播放3次。超过3次需要购买VIP。 由于过于贫穷,于是抽空,对其安卓APP进行了逆向分析,最终成功破解了其播放次数限制。

悖论2阅读 224

封面图
读懂 gradle dependencies
不过在使用 dependencies 时有一些细节之前一直没有搞清楚,遂研究了一下部分细节。本文整体参考 gradle 官方文档,大家感兴趣也可以自己深入研究下。

云音乐技术团队1阅读 453

封面图
从 Java 到 Kotlin - 介绍 Kotlin
可空对象(和 C# 的 <Nullable>enabled</Nullable> 相似) Int 和 Int? 是两种不同的类型;String和 String? 也是两种不同的类型(前者是后者的子类型) {代码...}

边城1阅读 1.5k评论 5

Android 最新开发技术更新,包括 Kotlin、Android Studio、Jetpack 和 Android 最新系统技术特性分享。...

389 声望
2k 粉丝
宣传栏