Gradle引用依赖 annotationProcessor 和implementation 的区别是什么?
作者:互联网
在 Gradle 中,annotationProcessor
和 implementation
是两种不同类型的依赖配置,它们在处理依赖时有不同的目的和行为。以下是它们之间的主要区别:
1. 目的
-
implementation
:- 用于声明项目的运行时和编译时所需的库依赖。
- 添加
implementation
依赖的库会在编译时可见,但不会暴露给依赖该模块的其他模块。也就是说,如果模块 A 依赖模块 B,而模块 B 使用了某个implementation
依赖,模块 A 将无法访问这个依赖的 API。
-
annotationProcessor
:- 用于指定处理注解的库,通常与生成代码相关的库(例如:Dagger、Room、Lombok 等)一起使用。
- 这些库在编译时使用注解处理器处理注解,并生成相应的代码。
- 注解处理器不会在最终的 APK 中包含,但它们的输出会被用于生成相关的 Java 类。
2. 使用场景
-
implementation
:- 适用于大多数普通的库依赖,比如常用的第三方库(例如 Retrofit、Gson 等),以及你自己的库,让它们在执行时可用。
-
annotationProcessor
:- 适用于需要使用注解处理器的库,这些处理器在编译时解析注解,并生成代码(如 Dagger 的依赖注入、Room 的 ORM)。
3. 示例
使用 implementation
:
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
}
Groovy
使用 annotationProcessor
:
dependencies {
implementation 'com.google.dagger:dagger:2.40'
annotationProcessor 'com.google.dagger:dagger-compiler:2.40'
}
Groovy
4. 效果与性能
-
implementation
:- 由于它不暴露其依赖,能够改善构建性能,因为 Gradle 在处理依赖时不需要考虑不相关的 API。
-
annotationProcessor
:- 添加注解处理器会在编译时执行,通过解析源代码中的注解生成类型,从而影响编译过程。
5. 其他
- 如果你在使用 Kotlin,可以替换
annotationProcessor
为kapt
(Kotlin Annotation Processing Tool),因为 Kotlin 的注解处理与 Java 不完全相同。
标签: 来源: