使用Java和Kotlin文件的Android项目,kapt还是annotationProcessor?

时间:2018-04-25 17:05:19

标签: java gradle kotlin apt kapt

我想知道,如果在 Android 项目混合 Java Kotlin 文件,我们必须使用annotationProcessor或kapt,或两者兼而有之?

在我的理解中, annotationProcessor 必须使用注释生成 Java 文件, kapt 必须用于 Kotlin 文件使用注释生成代码。

我有一个混合两种语言的项目,我刚刚用kapt替换了build.gradle中的所有annotationProcessor依赖项。 令人惊讶的是它构建并且似乎运行正常,但我不明白为什么kapt即使使用Java文件也能正常工作......

有人可以向我解释一下吗?

谢谢

2 个答案:

答案 0 :(得分:6)

首先,Kotlin Annotation处理工具(kapt)使用Java编译器来运行注释处理器。如果你的项目包含任何Java类,kapt会按照设计来处理它们。 Kotlinlang建议您使用kapt之前使用Android支持中的annotationProcessor

JetBrains有一个很好的article关于kapt如何更详细地工作,从2015年开始,但是在UP-TO-DATE。

答案 1 :(得分:2)

在Java中,您可以按如下所示指定注解处理器(或apt)依赖项:

dependencies {
  ...
  annotationProcessor "com.google.dagger:dagger-compiler:$dagger-version"
}

在Kotlin中,您必须添加kotlin-kapt插件以启用kapt,然后将annotationProcessor替换为kapt

apply plugin: 'kotlin-kapt' //Must include
dependencies {
    ...
    kapt "com.google.dagger:dagger-compiler:$dagger-version"
}

仅此而已!请注意,kapt会处理您的Java文件以及kotlin文件,因此您无需保留注释处理器依赖项。

有关更多详细信息:link