作者 / 軟件工程師 Ting-Yuan Huang 和產(chǎn)品經(jīng)理 David Winer
我們很高興地向您介紹 Kotlin Symbol Processing (KSP) 的 Alpha 版,幫助您在 Kotlin 中構(gòu)建輕量級編譯器插件的全新工具诚啃。KSP 提供的功能類似于 KAPT淮摔,但速度提高了 2 倍,可以直接訪問 Kotlin 編譯器功能始赎,并且開發(fā)時充分考慮到了多平臺兼容性和橙。
KSP 兼容 Kotlin 1.4.30 及更高版本。您可以在 KSP GitHub repo 中查看開放源代碼和文檔极阅。
為何推出 KSP胃碾?
Kotlin 開發(fā)者向我們反饋最多的需求就是提高構(gòu)建速度涨享。許多開發(fā)者每天都要迭代并部署數(shù)十次應(yīng)用筋搏,所以構(gòu)建速度緩慢會使開發(fā)者不得不將大量時間耗費在等待上。編譯 Kotlin 代碼的最大挑戰(zhàn)之一是 Kotlin 沒有原生注釋處理系統(tǒng)厕隧。諸如 Room 等注釋處理器在 Android 平臺無處不在奔脐,它們依賴于通過 Kotlin 注釋處理工具 (KAPT) 實現(xiàn)的 Java 注釋處理兼容性。但是吁讨,KAPT 的運行速度可能會很慢髓迎,因為它需要生成中間的 Java 存根,然后 Java 注釋處理系統(tǒng)才能對其進行提取建丧。
在設(shè)計 KSP 時排龄,我們考慮了如果從頭開始構(gòu)建,Kotlin 的注釋處理應(yīng)是怎樣的形式翎朱。KSP 提供了一個功能強大且簡單的 API橄维,它可以直接解析 Kotlin 代碼,因此大大降低了 KAPT 生成存根所帶來的構(gòu)建速度負(fù)擔(dān)拴曲。實際上争舞,利用 Room 庫執(zhí)行的初始基準(zhǔn)測試表明,KSP 相比 KAPT 速度提高了 2 倍左右澈灼。
開始使用
要查看 KSP 的實際運行情況竞川,請從 GitHub 下載 KSP Playground 項目。您可以從中獲得:
- 庫: 將構(gòu)建器模式作為 KSP 處理器實現(xiàn)的小型 test-processor 庫
- 使用項目: 顯示如何在實際 Kotlin 項目中使用構(gòu)建器處理器的 workload 目錄
實現(xiàn)構(gòu)建器的所有邏輯全部位于 test-processor 中 - 對于使用者 (workload) 來說叁熔,使用 KAPT 和使用 KSP 的唯一區(qū)別是更改了兩行構(gòu)建文件:
這是 KSP 的目標(biāo): 大多數(shù) Android 應(yīng)用開發(fā)者無需擔(dān)心其內(nèi)部結(jié)構(gòu)委乌;除了這一行更改以外,支持 KSP 的庫類似于普通的注釋處理器荣回,而速度卻提高了 2 倍福澡。也就是說,在同一模塊中使用 KAPT 和 KSP 最初可能會降低您的構(gòu)建速度驹马,因此在 Alpha 版期間革砸,最好在單獨的模塊中使用 KSP 和 KAPT除秀。
隨著越來越多的注釋處理器采用 KSP,我們希望您的大多數(shù)模塊都能夠使用 KSP 來直接替代 KAPT∷憷現(xiàn)在册踩,您可以在 表格 中查看哪些注釋處理器提供了 KSP 支持。如果表中缺少已支持或正在實現(xiàn) KSP 支持的庫效拭,請將您的寶貴建議反饋給我們暂吉!
如果您是當(dāng)前某個使用注釋處理的庫作者,可以在 快速入門 和 README 指南中找到有關(guān)如何使您的庫與 KSP 兼容的更多信息缎患。
對于庫作者而言慕的,KSP 目前所處的 Alpha 版階段是對其深入研究的良好契機,歡迎您在 KSP 問題跟蹤器 中向我們提供有關(guān) API 的反饋挤渔。此外肮街,我們會在谷歌開發(fā)者公眾號和 Kotlin Slack 的 #ksp 頻道上定期發(fā)布版本動態(tài)。自去年 6 月的開發(fā)者預(yù)覽版發(fā)布以來判导,我們已經(jīng)解決了超過 100 項錯誤和問題嫉父,其中數(shù)十項都來自優(yōu)秀的 Kotlin 庫開發(fā)者社區(qū)的反饋。希望您可以繼續(xù)將問題通過 KSP 問題跟蹤器 反饋給我們眼刃,或在文章下方進行留言绕辖。
Java 是 Oracle 和/或其附屬公司的注冊商標(biāo)。