使用 Kotlin Symbol Processing 1.0 縮短 Kotlin 構建時間

Android開發者發表於2021-10-08

作者 / 軟體工程師 Ting-Yuan Huang 和 Jiaxiang Chen

Kotlin Symbol Processing (KSP)——用於在 Kotlin 中構建輕量級編譯器外掛的全新工具現已推出穩定版本!其與 Kotlin 註解處理工具 (KAPT) 的功能相似,但速度提高了 2 倍,同時還可以直接訪問 Kotlin 語言結構並支援多個平臺目標。

在過去的幾個月裡,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 註釋處理器關注的資訊。但是建立這些存根的成本很高,這意味著編譯器必須多次解析程式中的所有符號 (一次生成存根,另一次完成實際編譯)。

KSP 不使用存根生成模型,而是作為 Kotlin 編譯器外掛執行。其允許註釋處理器使用 Kotlin 讀取並分析源程式和資源,讓您無需依賴 Java 註釋處理基礎架構。此舉大幅提升了構建速度 (對於 Room 的 Kotlin 測試應用 而言速度提高了 2 倍),同時也意味著 KSP 可以在非 Android 以及非 JVM 環境 (如 Kotlin/Native 和 Kotlin/JS) 中使用。

開始使用 KSP

要開始使用 KSP,您可以從 GitHub 下載 KSP Playground 專案,從中您將瞭解如何將 KSP 用作註釋處理器以及使用應用/庫:

  • 註釋處理器: 將構建器模式作為 KSP 處理器實現的小型 test-processor
  • 使用庫: 顯示如何在實際 Kotlin 專案中使用構建器處理器的 workload 目錄

如果您是應用開發者,請檢視 支援庫列表 以及 快速入門 指南,瞭解如何將模組從 KAPT 轉移至 KSP。

使用帶 KSP 的 Moshi 或 Room

如果您在專案中使用 Moshi 或 Room,您只需快速修復模組的構建檔案即可體驗 KSP。例如,要在 Gradle 模組中使用 KSP 版 Room,您只需將 KAPT 外掛替換為 KSP 並替換 KSP 依賴項:

您可以檢視 Room 版本說明 以瞭解更多資訊。

最後

通過使用 KSP 1.0 版,您可以發現 Kotlin 專案的構建速度得到了提升,因為您將不再使用基於 KAPT 的庫。同時,我們也更新了一些特定的 Android 庫,您可以立即嘗試,體驗改進後的強大效能。也歡迎您持續關注官方微信公眾賬號,隨時獲取最新資訊。

歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!

相關文章