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

Posted

技术标签:

【中文标题】带有 Java 和 Kotlin 文件、kapt 或 annotationProcessor 的 Android 项目?【英文标题】:Android project with Java and Kotlin files, kapt or annotationProcessor? 【发布时间】:2018-10-06 06:04:47 【问题描述】:

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

据我了解 annotationProcessor 必须用于 Java 文件,使用注解进行代码生成,kapt 必须用于 Kotlin 使用注释生成代码的文件。

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

谁能给我解释一下?

谢谢

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

在 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

【讨论】:

我尝试添加应用插件:'kotlin-kapt',应用程序无法构建,现在我无法使用任何需要 kapt 的东西,知道如​​何解决这个问题@Oxalihan 有没有annotationProcessor 配置也能获取kotlin 文件?

以上是关于带有 Java 和 Kotlin 文件、kapt 或 annotationProcessor 的 Android 项目?的主要内容,如果未能解决你的问题,请参考以下文章

在Kotlin中使用注释处理Android框架 kapt

kapt 生成的代码在编译阶段不可用

告别KAPT,使用KSP为Android编译提速

简单几招提速 Kotlin Kapt编译

我在 Kapt Debug Kotlin 中遇到错误。我在 gradle 文件中更新了依赖项的版本。仍然面临这个问题

告别KAPT,使用KSP为Android编译提速