文章目录

  • 一、compile 依赖作用
  • 二、implementation 依赖作用
  • 三、api 依赖作用
  • 四、compileOnly 依赖作用
  • 五、annotationProcessor 依赖作用
  • 六、lintChecks 依赖作用

在本篇博客中逐一分析以下依赖配置 :

  • implementation
  • api
  • compileOnly
  • runtimeOnly
  • annotationProcessor
  • lintChecks
  • lintPublish
  • apk ( 已废弃 )
  • compile ( 已废弃 )
  • provided ( 已废弃 )

Android 依赖参考文档 : https://developer.android.google.cn/studio/build/dependencies

一、compile 依赖作用


compile 依赖作用:

  • 编译打包 : 为 自己的项目模块 添加依赖 , 该依赖会参与到 编译 构建过程 , 并且会 打包到 Apk 文件 中 ;
  • 依赖传递 : 如果其它工程依赖本模块 , 则会 将依赖传递到其它工程 中 ;

示例 : A 项目 中使用 compile 依赖 B 依赖库 , 即 A 在 编译构建时需要 B 依赖库 , 最终 B 依赖库会打包到 A 项目的 Apk 文件中 ;

如果 C 项目 依赖 A 项目 , 由于 compile 配置会 传递依赖 , C 项目也需要将 B 依赖库导入到自己的依赖中 , 这就使得 构建效率 变低 ;

已废弃 : 该配置已经 废弃 , 使用 api 依赖 替代 ; 该依赖在没有废弃时使用频率最高 ;

由于依赖传递构建效率低 : compile 依赖 的 构建效率 会 非常低 , 构建时会 不停的检查依赖树 , 发现依赖传递后 , 还要 添加依赖的依赖 ;

二、implementation 依赖作用


implementation 依赖作用 :

  • 编译打包 : 使用 implementation 添加的依赖 , 会 参与到 编译过程 , 并会 打包到 Apk 文件中 ;
  • 不会传递 : 此类依赖 , 不会传递给其它模块 ;

示例 : A 项目 中使用 compile 依赖 B 依赖库 , 即 A 在 编译构建时需要 B 依赖库 , 最终 B 依赖库会打包到 A 项目的 Apk 文件中 ;

如果 C 项目 依赖 A 项目 , 由于 implementation 配置不会传递依赖 , C 项目是不知道 A 项目的 B 依赖库的 , 也无法访问 B 依赖库 ;

如果使用 compile 或者 api 添加依赖 , 则会有大量的依赖传递 , 构建效率 会 非常低 , 构建时会 不停的检查依赖树 , 发现依赖传递后 , 还要 添加依赖的依赖 ;因此 这两个 依赖方式 不常用 , implementation 依赖是当前最常见的依赖方式 ;

三、api 依赖作用


api 依赖作用 : 与 compile 依赖 作用类似 ,

  • 编译打包 : 依赖会参与到 编译 构建过程 , 并且会 打包到 Apk 文件 中 ;
  • 依赖传递 : 如果其它工程依赖本模块 , 则会 将依赖传递到其它工程 中 ;

使用场景 : 应用中使用的 基础依赖库 , 如 : 公用模块 , 工具库 , 底层库等 , 每个项目都需要该依赖库 , 适合使用依赖传递 ;

api 依赖弊端 : 使用 api 依赖时要特别小心 , 由于这种 依赖会进行传递 , 如果修改了这个依赖库 , 沿途所有依赖与该库的项目模块 , 都需要重新编译 , 会极大增加编译构建时间 , 能不用就不用 ;

推荐使用 implementation 依赖 代替 api 或 compile 依赖 ;

尽量不使用 api 或 compile 依赖 , 经常使用的是 implementation 依赖 ;

四、compileOnly 依赖作用


compileOnly 依赖作用 :

  • 编译过程 : 依赖只会 添加到编译路径中 , 参与 编译 构建过程 , 但是不会 打包到 Apk 文件 中 ;
  • 作用时机 : 该类型依赖 , 只在编译过程中做一些辅助类的工作 , 在工程中没有使用该依赖库 ;

compileOnly 依赖 的作用与 已废弃的 provided 依赖 类似 , 都是 将依赖库添加到编译路径中 ;

在 根目录的 build.gradle 顶层构建脚本 中的 buildScript 脚本块 中 , 使用了 classpath 依赖 , 该类型的依赖只应用在 buildScript 脚本块 , 其作用也是 将依赖库添加到编译路径中 , 与 compileOnly 依赖 和 provided 依赖 类似 ;

classpath 依赖 只用于 Gradle 运行时 为 Gradle 构建过程添加依赖 , compileOnly 依赖 和 provided 依赖 是 编译时 为工程添加的依赖 ;

五、annotationProcessor 依赖作用


annotationProcessor 依赖作用 : 该依赖用于设置 注解处理器 依赖 , 在 APT ( Annotation Processing Tool ) 注解处理工具 中使用该依赖 ;

可参考 Android APT 专栏 ;

注解处理器依赖处理流程 :

首先 , 在 程序中添加注解 ;

然后 , 在 Gradle 构建中配置注解处理器 , 自定义注解处理器执行一些编译时操作 ;

最后 , 运行构建过程中 , 在注解处理器中 , 处理一些编译时操作的内容 , 如 : ButterKnife , ARoute , DataBinding 等一般是用于根据注解生成一些 Java 源码 ;

注解处理器依赖示例 :

dependencies {annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'compileOnly 'com.google.auto.service:auto-service:1.0-rc3'
}

参考 【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 ) 博客 ;

六、lintChecks 依赖作用


lintChecks 依赖作用 : 在 Gradle 构建过程中 , 添加 lint 检查 ;

【Android Gradle 插件】Android 依赖管理 ④ ( 常用依赖配置分析 | implementation 依赖作用 | api 依赖作用 | compileOnly 依赖作用 )相关推荐

  1. 【Android Gradle 插件】工程根目录下 build.gradle 配置文件 ( 远程仓库配置 | 依赖配置 | 所有子模块配置 | task clean 任务 )

    文章目录 一.工程根目录下 build.gradle 配置文件 1.基本作用 2.远程仓库配置 3.依赖配置 3.所有子模块配置 4.task clean 任务 Android Plugin DSL ...

  2. 小记Android Gradle插件 Iven 记于 20190522 药厂

    2016.04年 Android Gradle插件2.x 通过支持字节码注入,将代码和资源更新推送到模拟器或物理设备上正在运行的应用程序,启用Instant Run. 添加了对增量构建的支持,即使应用 ...

  3. 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

    文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...

  4. Android Gradle 插件版本说明

    Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能.虽然 Android 插件通常会与 Andro ...

  5. 【Android Gradle 插件】Extension 扩展类型 ( Module 引入插件类型 | application 插件 | library 插件 | Variants 变体列表 )

    文章目录 一.Module 引入插件类型 1.com.android.application 插件 2.com.android.library 插件 二.Extension 扩展类型 三.applic ...

  6. 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#buildConfigField 方法 | 单独编译生成 BuildConfig 类的任务 )

    文章目录 一.ProductFlavor#buildConfigField 方法 二.单独执行 Gradle 编译 BuildConfig 的任务 Android Plugin DSL Referen ...

  7. 【Android Gradle 插件】Android Plugin DSL Reference 离线文档下载 ( GitHub 下载文档 | 查看文档 )

    文章目录 一.Android Plugin DSL Reference 文档下载 二.Android Plugin DSL Reference 文档查看 一.Android Plugin DSL Re ...

  8. android gradle proguard,Android Gradle插件2.2.0 ProGuard开始保留内部类

    在将Android Studio更新为2.2版并将Android Gradle插件更新为2.2.0之后,在构建发行版apk时会有很多警告,例如: Error:warning: Ignoring Inn ...

  9. 各个 Android Gradle 插件版本所需的 Gradle 版本

    下表列出了各个 Android Gradle 插件版本所需的 Gradle 版本. 要获得最佳性能,您应该使用 Gradle 和插件这两者的最新版本. 插件版本 所需的 Gradle 版本 1.0.0 ...

  10. 当前版本的Android Gradle插件不支持按需配置

    本文翻译自:Configuration on demand is not supported by the current version of the Android Gradle plugin A ...

最新文章

  1. ISME:病原菌介导植物根际有益微生物群落组装
  2. 【知识星球】网络结构1000变上线,下半年更新500+网络模型解读
  3. jcDate时间选取jQuery插件
  4. 解决Github速度太慢的几种方案
  5. wifi一阵一阵卡_家里wifi总是过一会就卡一下然后又好了
  6. VTK:网格之PointInterpolator
  7. php function split is deprecated,如何解决php Function split() is deprecated 的问题
  8. android webview 抖动,【报bug】关于webview中上下滑动出现抖动的问题
  9. Linux 设备驱动模型中的class(类)
  10. 2018年终总结—努力做一个有趣的人
  11. 计算机公开课推荐 2019.8
  12. java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...
  13. idea2017显示maven Project菜单
  14. Java+Swing+Mysql图书管理系统
  15. 解决Iphonex 底部按钮fixed,bottom:0 底部留白问题
  16. 在macOS系统下外接硬盘安装windows10虚拟机
  17. 配置linux服务器pptpd,Linux下配置pptpd
  18. WSTMart 国内开源商城系统佼佼者
  19. 重建windows系统的引导盘(亲测可用)
  20. Allegro PCB Design GXL (legacy) - Merge Shapes(合并形状)

热门文章

  1. MySql 获取年月日 时分秒、年月日、年月、年、月
  2. python画图时x轴自定义_自定义个范围的x,y坐标(python画图)
  3. js 秒数转换为时分秒
  4. 蜗牛游戏将在美上市:收入下滑,研发费用下降,石海夫妇为大赢家
  5. 15.federation
  6. 人工智能技术在建筑能源管理中的应用场景
  7. java中byte和Byte详解
  8. 正态检验 (Normality Test)——常见方法汇总与简述
  9. 试题 算法训练 十进制数转八进制数
  10. Hbuilder+PhPstudy配置PHP环境走过的坑