从 kapt 迁移到 KSP

借助 kapt(Kotlin 注解处理工具),您可以将 Java 注解处理器与 Kotlin 代码搭配使用,即使这些处理器没有特定的 Kotlin 支持也是如此。方法是从 Kotlin 文件生成 Java 桩,然后处理器就可以读取这些桩。生成桩是一项成本高昂的操作,并且对构建速度有很大影响。

KSP (Kotlin Symbol Processing)是以 Kotlin 优先的 kapt 替代方案。KSP 可直接分析 Kotlin 代码,使得速度提高多达 2 倍。此外,它还可以更好地了解 Kotlin 语言结构。

在迁移期间,您可以在项目中同时运行 kapt 和 KSP,并且您可以逐个模块、逐个库完成迁移。

下面简要介绍了迁移步骤:

  1. 检查您使用的库是否已支持 KSP
  2. 将 KSP 插件添加到您的项目中
  3. 将注释处理器替换为 KSP
  4. 移除 kapt 插件

检查您使用的库是否已支持 KSP

首先,检查与 kapt 搭配使用的库是否已支持 KSP。许多热门库(包括 DaggerGlideRoomMoshi)已支持 KSP,而其他一些库正在添加支持。

您可以查看文档中的支持的库列表,或者参阅您所用库的文档和问题跟踪器。

将 KSP 插件添加到您的项目中

首先,在顶级 build.gradle.kts 文件中声明 KSP 插件。您可以在 KSP GitHub 页面上找到版本列表。

Kotlin

plugins {
    id("com.google.devtools.ksp") version "2.3.4" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '2.3.4' 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 后,请同步并构建您的项目,看看它是否仍可正常运行。