[英]When do I need to use Kapt in Gradle dependencies?
我一直在 Gradle 中安装依赖项,但我不明白为什么有时我需要将 kapt 用于生命周期和房间数据库等库以使用@Something
注释。 但是在像 Retrofit2 和 Gson 这样的一些库中,我不需要使用 kapt 并且我可以使用诸如@SerializedName
注释?
注释(例如@Something
)基本上是代码的标签。 您标记代码的一部分,以便其他代码可以找到这些标记。
这个“其他代码”通常是一个注释处理器。 它查找注释并使用标有这些注释的代码执行某些操作。 例如,它可以生成新代码(如 Dagger、Butterknife 等)。
根据您在项目中引入依赖项的方式(取决于您使用的keyword
—— implementation
、 api
、 compileOnly
、 runtimeOnly
、 annotationProcessor
、 kapt
等),您的项目将使用不同的依赖项。
如果您使用annotationProcessor
,您的依赖项将不会打包在您的应用程序中,而是会在您的应用程序编译期间使用。
您不想在您的应用程序中打包编译器(处理@AnAnnotation
的代码),因为它只是用于正确准备您的应用程序代码(并且从未在您的应用程序运行时使用)。
可以这样想:
如果您要坐火车并且需要打印火车票,您不想在火车上随身携带打印机。 打印机打印完车票后,您拿着车票上火车。 打印机已经完成了它的工作。 你可以离开它。
如果您使用@AnAnnotation
标记一些代码,您只希望处理该注释的库完成其工作并消失。 因此,依赖项的特殊类型 - annotationProcessor
。
现在关于kapt
。 这很简单。 如果您想在带有 Kotlin 代码的项目中使用 Annotation Processors,只需使用kapt
而不是annotationProcessor
。 将其视为具有 Kotlin 支持的annotationProcessor
。
一些库以不同的方式使用@Annotations
。 它们不会导致在编译时生成任何代码,但它们在运行时使用注解。
这些通常是基于反射的库,它们在运行时“查看”代码。 就像 Retrofit 在您的应用程序执行时查看您的interface
。
这就是为什么您通常在应用程序中包含一个带有@Annotations
的库,并且这些注释被打包在您的 apk 中用于运行时操作。
总结:
annotationProcessor
和kapt
关键字用于帮助您指定如何在项目中使用依赖项。
如果你想引入一个使用注解并生成一些代码的库,请使用kapt
不要用已经完成其工作的代码“膨胀”你的 apk,并且永远不会再次使用。
通常,库通过以下两种方式之一与注解交互:
kapt
或annotationProcessor
。 示例:Retrofit,它使用反射访问注释并且不包含注释处理器。butterknife-compiler
模块。 您应该使用kapt
butterknife-compiler
作为kapt
或annotationProcessor
依赖项,而不是implementation
、 api
或compile
,因为您在运行时不需要注释处理器。要回答您的问题,没有通用的方法来了解依赖于注释的库是否带有注释处理器。 您应该查看特定库的文档并按照安装说明进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.