Skip to content

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

@liujingxing

Description

@liujingxing

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是时候退出历史舞台了

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions