- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在 Gradle 中安装依赖项,但我不明白为什么有时我需要为生命周期和房间数据库等库使用 kapt 才能使用 @Something
注解。但是在一些像 Retrofit2 和 Gson 这样的库中,我不需要使用 kapt,我可以使用诸如 @SerializedName
?
最佳答案
注释(例如 @Something
)基本上是代码的标签。您标记代码的一部分,以便某些其他代码可以找到这些标记。
这个“其他代码”通常是一个注解处理器。它会查找注释并使用标有这些注释的代码执行某些操作。例如。它可以生成新代码(如 Dagger、Butterknife 等)。
取决于你在项目中引入依赖的方式,(取决于你使用的关键字
- implementation
, api
, compileOnly
、runtimeOnly
、annotationProcessor
、kapt
等),您的项目将以不同方式使用依赖项。
如果您使用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 中用于运行时操作。
总结:
annotationProcessor
和 kapt
关键字,用于帮助您指定如何在项目中使用依赖项。
如果您想引入一个使用注释并生成一些代码的库,请使用 kapt
,不要使用已经完成其工作且永远不会被再次使用的代码“膨胀”您的 apk。
关于android - 我什么时候需要在 Gradle 依赖项中使用 Kapt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691764/
我最近从 Android Studio 2.3 更新到 3.0,和 kotlin 1.1.4 到 1.1.51。 现在我在我的 gradle 控制台中看到了这条消息: 'kapt.generateSt
我对 Android 中引入的与 Kotlin 相关的最新注释处理器有点困惑,它是 “卡普特” 问题 : 什么是 kapt(kotlin 注释处理工具)及其用例? 或者什么 apply plugin:
我使用 Algolia 开发了一个带有搜索界面的 Android 应用程序。 为此,我遵循本指南 InstantSearch但是当我添加 kapt "androidx.lifecycle:lifecy
昨天,我的 Android Studio 无缘无故开始显示以下消息: Gradle sync failed: org/jetbrains/kotlin/kapt/idea/KaptGradleMode
我的项目之前一直运行良好,直到我升级到 API 28并重构为 Androidx .首先我认为我必须解决问题代码,因为重构后 Unresolved reference 代码太多。在我解决了很多问题后,我
出于某种原因,Kapt 提示我的一个模块上没有启用增量编译。但是,我认为没有理由不应该这样做。 运行 core:kaptKotlin 时的警告信息 [WARN] Incremental annotat
我决定在 android 中启动一个项目,目前我遇到了这个错误。我有另一个由必须匹配 gradle 版本的数据绑定(bind)依赖项产生的。修复该问题后,当我尝试构建我的项目时,我仍然收到这个其他错误
我现在面临一个问题超过 3 天,我无法解决。 自从我开始在 Android 上使用 Kotlin,我停止使用“annotationProcessor”并开始使用“kapt”,直到我开始构建一个 And
我在我的 android 应用程序中使用 dagger2。即使没有错误,它也不会生成 Dagger 组件类。 我在设置中启用了注释处理器并重新启动了我的 android studio,但这对我不起作用
我已经使用 kapt 编写了一个代码生成器,并在使用 maven 编译 kotlin 的项目中使用它。 我发现在 Kotlin 的编译阶段之后调用了 kapt 生成器,这使我无法在同一项目中使用 ko
我看过 this answer和本网站上的其他人并使用谷歌,但我还没有找到适合这个问题的答案。这是最新版本的 KAPT 列出的剩余非增量注释处理器: Incremental annotation pr
我尝试使用 kapt和 vertx-Codegen生成我的服务。但输出路径是 /build/generated/source/kapt/main/ .我要 /src/main/generated/ .
我不明白为什么 kotlin 注释处理器无法解析这些参数。 我的 build.gradle.kts 的相关部分 plugins { id("kotlin-kapt") } android {
在 Kotlin 1.3.30 中添加了对增量注释处理的支持:https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/ 根据文
我正在使用 Kotlin、Databinding 和 Room 开发一个 android 项目。 有时构建失败并显示错误消息,其中不包含有关究竟出了什么问题的信息,除了它与注释处理器有关(可能有很多原
我有以下项目结构 root-project │ build.gradle.kts │ └───multiplatform-project │ │ build.gradle.kts │
当我尝试使用 dagger 2 构建项目时,出现 ArrayIndexOutOfBoundsException , Kotlin Coroutines和 Java 8。当我使用 Java 9 或 Ja
我想指示我的 Kotlin 注释处理器更改生成的类的输出目录。 我想从我的 Gradle 构建脚本中更改 kapt.kotlin.generated争论。我尝试了以下方法无济于事。 不起作用,路径不会
我为注释处理写了一个小库。使用 Gradle 将其编译为 jar 文件并添加到 android 项目中。在 build.gradle app lvl 中我添加了: dependencies { /
我正在尝试开发 Kotlin AnnotationProcessor 库,但我不明白为什么会出现此错误: Error:Execution failed for task ':app:javaPreCo
我是一名优秀的程序员,十分优秀!