Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ksp/kapt/annotationProcessor用法及区别 #447

Open
liujingxing opened this issue Jun 29, 2023 · 2 comments
Open

ksp/kapt/annotationProcessor用法及区别 #447

liujingxing opened this issue Jun 29, 2023 · 2 comments

Comments

@liujingxing
Copy link
Owner

liujingxing commented Jun 29, 2023

1、用法

//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版本列表

2、相同点

ksp、kapt、annotationProcessor都是注解处理器,用于在编译期间,查找相关注解,生成相关代码

3、不同点

  • 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目录下

4、如何选择

如果你要项目未集成kotlin,那没得选,只能用annotationProcessor, 如果集成了kotlin, 则可以选择kspkapt, 但ksp弥补了kapt的缺陷,且编译速度更快,肯定就选择kspkapt是时候退出历史舞台了

@liujingxing liujingxing pinned this issue Jun 29, 2023
@liujingxing liujingxing changed the title ksp、kapt、annotationProcessor 用法及区别 ksp/kapt/annotationProcessor用法及区别 Jun 29, 2023
@HoneyWorld
Copy link

大佬你这更新速度忒快了,我这本地kotlin还是1.5的,这更新的我想用只能升级Androidstudio版本,但又怕项目出问题,一直不敢动

@liujingxing
Copy link
Owner Author

大佬你这更新速度忒快了,我这本地kotlin还是1.5的,这更新的我想用只能升级Androidstudio版本,但又怕项目出问题,一直不敢动

我就当你是在夸我了,平均一个月更新一次,也还好;现在很稳定了,后续更新肯定会放缓

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants