一文了解 apt、 kapt 、 ksp 和 kcp

什么是 apt

apt(Annotation Processing Tool)是Java编译器提供的一个工具,用于在编译时处理注解。开发人员可以通过自定义注解处理器来生成代码、验证代码或者进行其他操作。

如果你之前使用过 ARouter,就知道引入旧版本的 ARouter 的库需要加入如下依赖:

gradle 复制代码
compile 'com.alibaba:arouter-api:x.x.x'
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'

其中 annotationProcessor 就是 Android Gradle 内部提供的注解处理器。原理如下图所示,图片来源看懂编译注解annotationProcessor和kapt

什么是 kapt

上面提到过,apt 可以在编译时处理java文件中的注解。但是对于纯 kotlin 项目或者 kotlin 与 Java 混合的项目,apt 就无能为力了。

这时就可以使用 kapt 了。kapt 全称是 Kotlin annotation processing tool,中文翻译是指 Kotlin 注解处理工具 。使用 kapt ,就可以将 Java 注解处理器与 Kotlin 代码搭配使用了。在开发中,要使用 kapt 也非常简单,首先需要引入插件 kotlin-kapt,然后将 annotationProcessor 换成 kapt 就可以了。代码示例如下:

gradle 复制代码
plugins {
    id "org.jetbrains.kotlin.kapt" version "2.0.0"
}

dependencies {
    compile 'com.alibaba:arouter-api:x.x.x'
    kapt 'com.alibaba:arouter-compiler:x.x.x'
    ...
}

什么是 KSP

在开发中使用 kapt 会带来一个严重的缺陷,就是它会拖慢编译的速度 。为了解决这个问题,kotlin 团队随后推出了 KSP 插件,用来取代 kapt 插件。

KSP 全称是 Kotlin Symbol Processing,中文翻译是 kotlin 符号处理 。相比于 kaptKSP 可以使得编译速度提高最多达 2 倍。为什么KSP可以相比 kapt 提高这么多呢?

这是因为 KSP 是利用 Kotlin 编译器提供的 Symbol Processor API 实现的,它能够在编译期获取编译器生成的符号(Symbols)信息,如类、函数、属性等的元数据。通过这些符号信息,KSP可以实现更精细的代码生成和处理,与Kotlin编译器更深入地进行交互。

使用 KSPkapt 类似,只需要引入插件 kotlin-ksp,然后将 kapt 换成 ksp 就可以了。代码示例如下:

gradle 复制代码
plugins {
    id 'com.google.devtools.ksp' version '2.0.0-1.0.21'
}

dependencies {
    implementation 'com.google.dagger:dagger-compiler:2.51.1'
    ksp 'com.google.dagger:dagger-compiler:2.51.1'
}

什么是 KCP

KCP 是指 Kotlin Compiler Plugin,中文翻译是 kotlin 编译插件。上面的介绍的 KSP 就是基于 KCP 来实现的。KCP 的功能非常强大,它在编译期间提供了各种接口,可以通过这些接口来实现解析 AST、修改字节码产物等等功能。比如说我们熟悉的 Kotlin 的语法糖很多都是 KCP 实现的,例如 data class@Parcelizekotlin-android-extensionCompose 等等。

不过 KCP 虽然非常强大,但是学习曲线也非常高。所以,kSP 开发团队才会开发出 KSP 插件来简化操作,而不是直接使用 KCP

参考

相关推荐
装杯让你飞起来啊2 小时前
第 2 周 Day 5-6:综合小游戏 —— 学生成绩管理系统
windows·microsoft·kotlin
装杯让你飞起来啊4 小时前
Kotlin List / Array 与 for 循环
开发语言·kotlin·list
装杯让你飞起来啊5 小时前
混合练习 —— 猜数字游戏
windows·游戏·kotlin
装杯让你飞起来啊6 小时前
Kotlin 条件判断 if / when 与智能转换 smart cast
开发语言·python·kotlin
pengyu6 小时前
【Kotlin 协程修仙录 · 金丹境 · 初阶】 | 并发艺术:async/await 与并发组合的优雅之道
android·kotlin
黄林晴9 小时前
重磅发布!KMP 双端订阅支付彻底封神,一套代码搞定 iOS+Android
android·kotlin
alexhilton1 天前
揭密:Compose应用如何做到启动提升34%
android·kotlin·android jetpack
jason.zeng@15022072 天前
Androidr入门环境搭建
java·kotlin
jinanwuhuaguo3 天前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
我命由我123453 天前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime