33

我想知道在混合JavaKotlin文件的Android项目中,我们是否必须使用 annotationProcessor 或 kapt,或两者都使用?

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

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

有人可以向我解释吗?

谢谢

4

2 回答 2

32

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

JetBrains 有一篇关于 kapt 如何更详细地工作的好文章,它从 2015 年开始,但一直是最新的。

于 2018-04-25T17:56:35.960 回答
27

在 Java 中,您可以指定 annotationProcessor(或 apt)依赖项,如下所示:

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

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

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

就这样!请注意,kapt 会处理您的 Java 文件以及 kotlin 文件,因此您不需要保留 annotationProcessor 依赖项。

更多详情:链接

于 2018-09-07T12:58:05.023 回答