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

2021 年 10 月 8 日 谷歌开发者

作者 / 软件工程师 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 开发


☟ 即刻了解课程详情 ☟




推荐阅读

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



 点击屏末  | 即刻获取快速入门指南




登录查看更多
0

相关内容

Kotlin 是一种运行于 Java 虚拟机上的静态类型编程语言。
EMNLP 2021 | 预训练跨语言模型中的大词表构建及使用
专知会员服务
20+阅读 · 2022年1月5日
【2021新书】ApachePulsar 实战,402页pdf
专知会员服务
69+阅读 · 2021年12月29日
专知会员服务
79+阅读 · 2021年7月3日
专知会员服务
85+阅读 · 2021年6月30日
【Manning新书】C++并行实战,592页pdf,C++ Concurrency in Action
医疗知识图谱构建与应用
专知会员服务
384+阅读 · 2019年9月25日
Android Studio 新特性详解
谷歌开发者
0+阅读 · 2022年1月19日
Android 与 Chrome OS 中针对大屏幕设备的更新
谷歌开发者
0+阅读 · 2022年1月17日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
Kotlin,竟然这么香!| 极客时间
InfoQ
0+阅读 · 2022年1月5日
跨平台开发框架 Compose Multiplatform 1.0 发布
Room & Kotlin 符号的处理
谷歌开发者
0+阅读 · 2021年11月4日
Paging 3.0 简介 | MAD Skills
谷歌开发者
0+阅读 · 2021年10月29日
使用 Kotlin 重写 AOSP 日历应用
谷歌开发者
0+阅读 · 2021年9月15日
正式版即将到来 | Android 12 Beta 5 现已发布
谷歌开发者
0+阅读 · 2021年9月9日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
4+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
VIP会员
相关VIP内容
EMNLP 2021 | 预训练跨语言模型中的大词表构建及使用
专知会员服务
20+阅读 · 2022年1月5日
【2021新书】ApachePulsar 实战,402页pdf
专知会员服务
69+阅读 · 2021年12月29日
专知会员服务
79+阅读 · 2021年7月3日
专知会员服务
85+阅读 · 2021年6月30日
【Manning新书】C++并行实战,592页pdf,C++ Concurrency in Action
医疗知识图谱构建与应用
专知会员服务
384+阅读 · 2019年9月25日
相关资讯
Android Studio 新特性详解
谷歌开发者
0+阅读 · 2022年1月19日
Android 与 Chrome OS 中针对大屏幕设备的更新
谷歌开发者
0+阅读 · 2022年1月17日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
Kotlin,竟然这么香!| 极客时间
InfoQ
0+阅读 · 2022年1月5日
跨平台开发框架 Compose Multiplatform 1.0 发布
Room & Kotlin 符号的处理
谷歌开发者
0+阅读 · 2021年11月4日
Paging 3.0 简介 | MAD Skills
谷歌开发者
0+阅读 · 2021年10月29日
使用 Kotlin 重写 AOSP 日历应用
谷歌开发者
0+阅读 · 2021年9月15日
正式版即将到来 | Android 12 Beta 5 现已发布
谷歌开发者
0+阅读 · 2021年9月9日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
4+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
Top
微信扫码咨询专知VIP会员