-
-
Notifications
You must be signed in to change notification settings - Fork 458
ksp、kapt、annotationProcessor 用法及区别
liujingxing edited this page Jun 29, 2023
·
11 revisions
//annotationProcessor无需依赖任何插件,ksp/kapt选择对应的插件即可
plugins {
// id 'kotlin-kapt'
id 'com.google.devtools.ksp' version '1.8.0-1.0.9'
}
//ksp/kapt/annotationProcessor 传参方式如下
//ksp传参方式
ksp {
arg("rxhttp_rxjava", "3.1.1")
}
//kapt传参方式
kapt {
arguments {
arg("rxhttp_rxjava", "3.1.1")
}
}
//annotationProcessor传参方式,需要在android.defaultConfig标签下使用
javaCompileOptions {
annotationProcessorOptions {
arguments = [
rxhttp_rxjava: '3.1.1',
]
}
}
dependencies {
//三选一
ksp 'com.github.liujingxing.rxhttp:rxhttp-compiler:x.x.x'
//kapt 'com.github.liujingxing.rxhttp:rxhttp-compiler:x.x.x'
//annotationProcessor 'com.github.liujingxing.rxhttp:rxhttp-compiler:x.x.x'
}
对于ksp1.8.0-1.0.9
版本, 1.8.0是kotlin版本,1.0.9是ksp的真实版本,如果想使用其它版本,请点击ksp版本列表
ksp、kapt、annotationProcessor都是注解处理器,用于在编译期间,查找相关注解,生成相关代码
-
annotationProcessor
仅会检索Java代码,且没有用到注解时,不会工作;生成的代码在build/generated/ap_generated_sources
目录下 -
kapt
是Kotlin时代的产物,会检索kotlin/java代码,但kotlin的一些专有属性拿不到,如const
关键字、伴生对象等在代码层面无法判断,同样的,没有用到注解时,不会工作;生成的代码在build/generated/source/kapt
目录下 -
ksp
则是最新的注解处理器,编译速度号称是kapt
的2倍有余,且完全弥补了kapt/annotationProcessor
的缺陷,但纯Java项目用不了,必需要集成kotlin;生成的代码在build/generated/ksp
目录下
如果你要项目未集成kotlin,那没得选,只能用annotationProcessor
, 如果集成了kotlin, 则可以选择ksp
或kapt
, 但ksp
弥补了kapt
的缺陷,且编译速度更快,肯定就选择ksp
,kapt
是时候退出历史舞台了