我什么时候需要在 Gradle 依赖项中使用 Kapt?

gd0*_*xxx 9 android gradle kotlin kapt

我一直在 Gradle 中安装依赖项,但我不明白为什么有时我需要将 kapt 用于生命周期和房间数据库等库以使用@Something注释。但是在像 Retrofit2 和 Gson 这样的一些库中,我不需要使用 kapt,我可以使用诸如@SerializedName?

Bar*_*ski 16

注释(例如@Something)基本上是代码的标签。您标记代码的一部分,以便其他代码可以找到这些标记。

这个“其他代码通常是一个注释处理器。它查找注释并使用标有这些注释的代码执行某些操作。例如,它可以生成新代码(如 Dagger、Butterknife 等)。


根据您的项目引进依赖的方式,(取决于keyword您使用- ,implementationapicompileOnlyruntimeOnlyannotationProcessorkapt等),相关性将被你的项目不同的使用。

如果您使用annotationProcessor,您的依赖项将不会打包在您的应用程序中,而是会在您的应用程序编译期间使用。

您不想@AnAnnotation在您的应用程序中打包编译器(处理 的代码),因为它只是用于正确准备您的应用程序代码(并且永远不会在您的应用程序运行时使用)。

可以这样想:

如果您要坐火车并且需要打印火车票,您不想在火车上随身携带打印机。打印机打印完车票后,您拿着车票上火车。打印机已经完成了它的工作。你可以离开它。

如果您标记一些代码,@AnAnnotation您只希望处理该注释的库完成其工作并消失。因此依赖的特殊类型 - annotationProcessor.

现在关于kapt. 这很简单。如果你想使用注解处理器在与科特林代码项目,只是使用kapt替代annotationProcessor。把它想象成annotationProcessorKotlin 支持。


一些库使用@Annotations不同。它们不会导致在编译时生成任何代码,但它们在运行时使用注解。

这些通常是基于反射的库,它们在运行时“查看”代码。就像 Retrofitinterface在您的应用程序执行时查看您的内容一样。

这就是为什么您@Annotations在应用程序中通常包含一个库,并且这些注释被打包在您的 apk 中用于运行时操作。


总结:

annotationProcessorkapt关键字,用于帮助您指定如何在项目中使用依赖项。

如果您想引入一个使用注释并生成一些代码的库,请kapt不要使用已经完成其工作且永远不会再次使用的代码来“膨胀”您的 apk。