Android项目中有Java和Kotlin文件,应该使用kapt还是annotationProcessor?

39
我想知道在一个Android项目中混合使用Java和Kotlin文件时,我们是否必须使用annotationProcessor或kapt,还是两者都要用?
我的理解是,对于使用注释进行代码生成的Java文件,必须使用annotationProcessor,而对于使用注释进行代码生成的Kotlin文件,则必须使用kapt。
我有一个混合了两种语言的项目,我只是把build.gradle中所有的annotationProcessor依赖替换成了kapt。令人惊讶的是,它构建并且似乎运行正确,但我不明白为什么kapt即使与Java文件一起使用也能很好地工作...
有人能给我解释一下吗?
谢谢
2个回答

40

首先,Kotlin注解处理工具(kapt)使用Java编译器运行注解处理器。如果您的项目包含任何Java类,则kapt会按设计处理它们。Kotlinlang 建议在以前使用过 Android Support 中的 annotationProcessor 的情况下使用 kapt

JetBrains有一篇关于kapt如何更详细地工作的文章,虽然是 2015 年的,但仍然是最新的。


33
在Java中,您可以像下面这样指定注释处理器(或apt)依赖项:
```

在Java中,您可以像下面这样指定注释处理器(或apt)依赖项:

```
dependencies {
  ...
  annotationProcessor "com.google.dagger:dagger-compiler:$dagger-version"
}
在Kotlin中,您需要添加插件以启用kapt,并将替换为:
apply plugin: 'kotlin-kapt' //Must include
dependencies {
    ...
    kapt "com.google.dagger:dagger-compiler:$dagger-version"
}

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

有关更多详细信息,请访问:链接


1
我尝试添加了 apply plugin: 'kotlin-kapt',但应用程序无法构建,现在我无法使用任何需要 kapt 的东西,你有什么解决办法吗?@Oxalihan - Mohammad Elsayed
有没有办法让annotationProcessor配置也能够识别kotlin文件? - AouledIssa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接