Kapt (Kotlin 註解處理工具) 可讓您將 Java 註解處理工具與 Kotlin 程式碼搭配使用,即使這些處理工具並未支援 Kotlin 也沒問題,方法是透過 Kotlin 檔案產生 Java 虛設常式,供這些處理工具讀取。產生這類虛設常式是相當耗費資源的作業,並會大幅影響建構速度。
KSP (Kotlin Symbol Processing) 是以 Kotlin 優先的 kapt 替代方案,KSP 可直接分析 Kotlin 程式碼,且速度可達 2 倍。此外,KSP 對於 Kotlin 的語言結構有更充分的瞭解。
您可於遷移期間在專案中並行執行 kapt 和 KSP,並可針對各個模組和各個程式庫逐一進行遷移。
以下是遷移步驟總覽:
- 確認您使用的程式庫是否支援 KSP
- 在專案中新增 KSP 外掛程式
- 使用 KSP 取代註解處理工具
- 移除 kapt 外掛程式
確認您使用的程式庫是否支援 KSP
首先,請確認您目前搭配 kapt 使用的程式庫是否支援 KSP。許多熱門程式庫 (包括 Dagger、Glide、Room 和 Moshi) 都正在新增對 KSP 的支援。
您可以查看說明文件中的支援的程式庫清單,或參閱所用程式庫的說明文件和問題追蹤工具。
在專案中新增 KSP 外掛程式
首先,請在頂層 build.gradle.kts
檔案中宣告 KSP 外掛程式,並確認所選 KSP 版本與專案的 Kotlin 版本一致。您可以在 KSP GitHub 頁面中查看版本清單。
Kotlin
plugins { id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false }
Groovy
plugins { id 'com.google.devtools.ksp' version '2.0.21-1.0.27' apply false }
接著在模組層級 build.gradle.kts
檔案中啟用 KSP:
Kotlin
plugins { id("com.google.devtools.ksp") }
Groovy
plugins { id 'com.google.devtools.ksp' }
使用 KSP 取代註解處理工具
啟用 KSP 後,您就能開始使用 KSP 取代 kapt。針對大部分的程式庫,您只需要在宣告依附元件時將 kapt 變更為 ksp 即可,原因是這兩者會在相同成果中提供其註解處理工具和 KSP 處理工具。
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
Groovy
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
遷移至 KSP 之後,請同步處理並建構專案,確認專案是否仍可正常運作。
以下列舉幾個需要留意的常見問題:
- 某些程式庫針對 kapt 和 KSP 支援的功能並不相同。如果程式碼在遷移後發生問題,請參閱程式庫的說明文件。
- 與 kapt 相比,KSP 的 Kotlin 類型資訊 (例如是否可為空值的相關資訊) 更加準確。這表示在類型要求方面,KSP 可能較明確。因此,除了更新建構檔案以外,您可能還需要稍微修正原始碼。
- 如果您先前透過引數傳遞至註解處理工具,則現在可能必須透過那些引數傳遞至 KSP。請注意,kapt 和 KSP 的引數格式可能並不相同。詳情請參閱 KSP 說明文件和所用程式庫的說明文件。
移除 kapt 外掛程式
當模組中已沒有 kapt
隨附的依附元件時,請移除 kapt 外掛程式。
如果您是在 plugins 區塊中宣告 kapt 外掛程式:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Groovy
plugins {id 'org.jetbrains.kotlin.kapt'}
如果 kapt 外掛程式使用 Groovy 的 apply plugin 語法:
apply plugin: 'kotlin-kapt'
您也必須移除與 kapt 相關的所有其他設定,例如:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Groovy
kapt { correctErrorTypes true useBuildCache true }