Gradle 依赖项配置

news/2024/5/20 3:06:02 标签: gradle, android

Android 成长在于积累和分享

本文:https://www.jianshu.com/p/49fc95d8c937

前言

Gradle 依赖配置查询

配置行为
implementation将依赖项添加到编译类路径,并将依赖项打包到构建输出

注意:Model使用时,不会泄露给其它模块引用
api将依赖项添加到编译类路径,并将依赖项打包到构建输出

注意:使用时,会泄露给其它模块引用
compileOnly将依赖项添加到编译类路径,不会将其添加到构建输出
runtimeOnly不会将依赖项添加到编译类路径,只将其添加到构建输出,以便运行时使用

此配置的行为类似于 apk(现已弃用)
annotationProcessor添加对作为注解处理器的库的依赖
lintCheckslint检查
lintPublish使得使用 AAR 的项目也应用这些 lint 检查

依赖项配置

  • implementation

Gradle 会将依赖项添加到编译类路径,并将依赖项打包到构建输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能使用该依赖项。

使用此依赖项配置代替 apicompile(已弃用)可以显著缩短构建时间,因为这样可以减少构建系统需要重新编译的模块数。例如,如果 implementation 依赖项更改了其 API,Gradle 只会重新编译该依赖项以及直接依赖于它的模块。大多数应用和测试模块都应使用此配置。

  • api

Gradle 会将依赖项添加到编译类路径和构建输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。

此配置的行为类似于 compile(现已弃用),但使用它时应格外小心,只能对您需要以传递方式导出到其他上游消费者的依赖项使用它。这是因为,如果 api 依赖项更改了其外部 API,Gradle 会在编译时重新编译所有有权访问该依赖项的模块。因此,拥有大量的 api 依赖项会显著增加构建时间。除非要将依赖项的 API 公开给单独的模块,否则库模块应改用 implementation 依赖项。

  • compileOnly

Gradle 只会将依赖项添加到编译类路径(也就是说,不会将其添加到构建输出)。如果您创建 Android 模块时在编译期间需要相应依赖项,但它在运行时可有可无,此配置会很有用。

如果您使用此配置,那么您的库模块必须包含一个运行时条件,用于检查是否提供了相应依赖项,然后适当地改变该模块的行为,以使该模块在未提供相应依赖项的情况下仍可正常运行。这样做不会添加不重要的瞬时依赖项,因而有助于减小最终 APK 的大小。此配置的行为类似于 provided(现已弃用)。

注意:您不能将 compileOnly 配置与 AAR 依赖项配合使用。

  • runtimeOnly

Gradle 只会将依赖项添加到构建输出,以便在运行时使用。也就是说,不会将其添加到编译类路径。此配置的行为类似于 apk(现已弃用)。

  • annotationProcessor

如需添加对作为注解处理器的库的依赖,您必须使用 annotationProcessor 配置将其添加到注解处理器的类路径。这是因为,使用此配置可以将编译类路径与注释处理器类路径分开,从而提高构建性能。如果 Gradle 在编译类路径上找到注释处理器,则会禁用避免编译功能,这样会对构建时间产生负面影响(Gradle 5.0 及更高版本会忽略在编译类路径上找到的注释处理器)。

如果 JAR 文件包含以下文件,则 Android Gradle 插件会假定依赖项是注释处理器:META-INF/services/javax.annotation.processing.Processor。 如果插件检测到编译类路径上包含注解处理器,则会产生构建错误。

注意:Kotlin 项目应使用 kapt 声明注解处理器依赖项。

  • lintChecks

使用此配置可以添加您希望 Gradle 在构建项目时执行的 lint 检查。

注意:使用 Android Gradle 插件 3.4.0 及更高版本时,此依赖项配置不再将 lint 检查打包在 Android 库项目中。如需将 lint 检查依赖项包含在 AAR 库中,请使用下面介绍的 lintPublish 配置。

  • lintPublish

在 Android 库项目中使用此配置可以添加您希望 Gradle 编译成 lint.<wbr style="box-sizing: inherit;">jar 文件并打包在 AAR 中的 lint 检查。这会使得使用 AAR 的项目也应用这些 lint 检查。如果您之前使用 lintChecks 依赖项配置将 lint 检查添加到已发布的 AAR 中,则需要迁移这些依赖项以改用 lintPublish 配置。

dependencies {
  // Executes lint checks from the ':checks' project
  // at build time.
  lintChecks project(':checks')
  // Compiles lint checks from the ':checks-to-publish'
  // into a lint.jar file and publishes it to your
  // Android library.
  lintPublish project(':checks-to-publish')
}

参考文献

https://developer.android.google.cn/studio/build/dependencies


http://www.niftyadmin.cn/n/1525990.html

相关文章

Kafka命令行常用命令说明(二)

参考官网site: http://kafka.apache.org/documentation.html#basic_ops_cluster_expansion https://cwiki.apache.org/confluence/display/KAFKA/Replicationtools#Replicationtools-6.ReassignPartitionsTool 说明: 当我们对kafka集群扩容时&#xff0c;需要满足2点要求: 将指…

Redhat8: SCTP: type= 5 errno= <0x5e> Socket type not supported

文章目录 参考错误原因解决方法怎么实现的?modinfomodinfo sctpmodprobe参考 https://access.redhat.com/solutions/3665951 https://blog.csdn.net/qq_36428903/article/details/109886650 错误 0x5e: 94 ESOCKTNOSUPPORT Socket type not supported enum sock_type {SO…

AndroidStudio 查看SDK版本当前市场分发情况

Android Studio 前言 之前都不知道哪去看SDK版本的市场分发情况&#xff0c;现在好了&#xff0c;直接可以在Studio中查看。 数据是以 7 天为单位收集的。 未显示分发率低于 0.1% 的屏幕配置。 查看方式 1. 使用 Create New Project方式 打开 File - New - New Project… 选…

使用注解限定入参

时间长了总是会容易遗忘的知识点 前言 其实这个写不写都能从源码里翻例子&#xff0c;但是每次去翻总觉得找的不是自己想要的&#xff0c;算了&#xff0c;还是写一下记录下吧。 StringDef 限定 Retention(SOURCE)StringDef({POWER_SERVICE,WINDOW_SERVICE,LAYOUT_INFLATER_S…

AndroidStudio 修改注释渲染(documentation显示@hide)

Android Studio Setting 前言 更新了最新版的 Android Studio Arctic Fox 之后&#xff0c;发现看源码的时候&#xff0c;注释都是渲染成文档状态了。这样挺方便阅读的。而且可以直接点击链接跳转等操作。以如下图为例&#xff1a; 好倒是挺好的&#xff0c;方便了阅读源码。…

Spring中@Autowired注解、@Resource注解的区别

Spring不但支持自己定义的Autowired注解&#xff0c;还支持几个由JSR-250规范定义的注解&#xff0c;它们分别是Resource、PostConstruct以及PreDestroy。  Resource的作用相当于Autowired&#xff0c;只不过Autowired按byType自动注入&#xff0c;而Resource默认按 byName自…

Kernel: down_write,x86下内核整型数据的原子操作 [积木]

数据结构 源代码 /** lock for writing*/ static inline int __down_write_common(struct rw_semaphore *sem, int state) {if (

protobuf对象序列化问题一

今天在项目中遇到一个奇葩问题。问题描述&#xff1a;项目基于dubbo服务做的模块多个项目模块通过maven构建依赖&#xff0c;其中有几个模块一个是算法转换服务A另一个模块是通用配置模块B&#xff0c;一个是config服务C。他们通过接口相互依赖&#xff0c;A在调用C服务redis存…