從 kapt 遷移至 KSP

Kapt (Kotlin 註解處理工具) 可讓您 使用 Kotlin 程式碼的 Java 註解處理工具 且特別支援 Kotlin。方法是從 處理器可讀取的 Kotlin 檔案。產生這類虛設常式 並會大幅影響建構速度。

KSP (Kotlin Symbol Processing) 是以 Kotlin 優先的替代方案, kapt。可直接分析 Kotlin 程式碼,大小最高可達 2 倍 速度更快。此外,該平台也更瞭解 Kotlin 的 這個概念

Kapt 目前處於維護模式,建議您從 kapt 遷移至 KSP 。在大多數情況下,您只需要變更 授予專案建構設定

您可以在專案階段 並能依模組和程式庫完成遷移作業。

以下是遷移步驟總覽:

  1. 確認您使用的程式庫是否支援 KSP
  2. 在專案中新增 KSP 外掛程式
  3. 使用 KSP 取代註解處理工具
  4. 移除 kapt 外掛程式

確認您使用的程式庫是否支援 KSP

首先,請確認您目前搭配 kapt 使用的程式庫是否已有 KSP 聯絡。許多熱門程式庫 (包括 DaggerGlideRoomMoshi) 以及其他服務對現狀的支援,

您可以查看支援的資料庫清單,前往 文件,或參閱程式庫的說明文件和 Issue Tracker 您使用的資源

在專案中新增 KSP 外掛程式

首先,請在頂層 build.gradle.kts 檔案中宣告 KSP 外掛程式。 確認所選 KSP 版本與專案的 Kotlin 一致 版本。您可以在 KSP GitHub 查看版本清單 頁面

Kotlin

plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' 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 處理器可能比類型更精準 Google Cloud 就是最佳選擇因此,您可能還需要修正原始碼中的 更新檔。
  • 如果您先前透過引數傳遞至註解處理工具, 現在您可能需要將這些引數傳遞至 KSP請注意,廣告格式 kapt 和 KSP 可能有不同的引數請參閱 KSP 說明文件,以及參閱程式庫的說明文件 就會採用該 API

移除 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
}

其他資源