天天看點

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 的唯一差別是更改了兩行建構檔案:

Kotlin Symbol Processing (KSP) Alpha 版現已釋出

這是 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 和/或其附屬公司的注冊商标。