Android 带有 Java 和 Kotlin 文件、kapt 或 annotationProcessor 的项目?

Android project with Java and Kotlin files, kapt or annotationProcessor?

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

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

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

谁能给我解释一下?

谢谢

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

JetBrains 对 kapt 的工作原理有一个很好的 article 更详细的介绍,它是从 2015 年开始的,但是是最新的。

在 Java 中,您可以像下面这样指定 annotationProcessor(或 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 文件,因此您无需保留 annotationProcessor 依赖项。

更多详情:link