借助 kapt(Kotlin 注解处理工具),您可以将 Java 注解处理器与 Kotlin 代码搭配使用,即使这些处理器没有特定的 Kotlin 支持也是如此。方法是从 Kotlin 文件生成 Java 桩,然后处理器就可以读取这些桩。生成桩是一项成本高昂的操作,并且对构建速度有很大影响。
KSP (Kotlin Symbol Processing)是以 Kotlin 优先的 kapt 替代方案。KSP 可直接分析 Kotlin 代码,使得速度提高多达 2 倍。此外,它还可以更好地了解 Kotlin 语言结构。
在迁移期间,您可以在项目中同时运行 kapt 和 KSP,并且您可以逐个模块、逐个库完成迁移。
下面简要介绍了迁移步骤:
- 检查您使用的库是否已支持 KSP
- 将 KSP 插件添加到您的项目中
- 将注释处理器替换为 KSP
- 移除 kapt 插件
检查您使用的库是否已支持 KSP
首先,检查与 kapt 搭配使用的库是否已支持 KSP。许多热门库(包括 Dagger、Glide、Room 和 Moshi)已支持 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 后,请同步并构建您的项目,看看它是否仍可正常运行。