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

标签 android gradle kotlin kapt

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

这样的注解

最佳答案

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

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


取决于你在项目中引入依赖的方式,(取决于你使用的关键字 - implementation, api, compileOnlyruntimeOnlyannotationProcessorkapt 等),您的项目将以不同方式使用依赖项。

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

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

这样想:

If you're going on a train and you need to print a train ticket, you don't want to carry a printer with you on the train. After the printer is done printing the ticket, you take the ticket and go on the train. Printer has done its job already. You can leave it.

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

现在关于kapt。这很简单。如果您想在包含 Kotlin 代码的项目中使用注释处理器,只需使用 kapt 而不是 annotationProcessor。将其视为具有 Kotlin 支持的 annotationProcessor


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

那些通常是基于反射的库,它们在运行时“查看”代码。就像当您的应用程序执行时,Retrofit 正在查看您的界面

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


总结:

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

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

关于android - 我什么时候需要在 Gradle 依赖项中使用 Kapt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691764/

相关文章:

android - Android Kotlin将数据从Viewpager的基本 fragment 传递到其Tab fragment 之一

android - 获取任意点的 HitTestResult

android - Android 上的应用内计费(购买确认,json 字符串)

android - 期望属性 getter 或 setter

android - getFragmentManager() 在 Kotlin 中不起作用

java - 在Gradle的Java测试中使用Scala类

android - 如何获取 CameraControl 和 CameraInfo

java - 如何解决错误 "Fatal Error : Main Unable to start the activity"

android - 无法在Idea中导入gradle android项目

Gradle Ear 插件 : Adding modules without version specifier