Gradle 使用技巧(三) - dependencies 的类型与区别

简介: 前言dependencies对于Android开发人员来说,并不陌生, 它是用来配置当项目的依赖项,接收的是一个DependencyHandler的闭包。

前言

dependencies对于Android开发人员来说,并不陌生, 它是用来配置当项目的依赖项,接收的是一个DependencyHandler的闭包。

dependencies的类型

dependencies的类型可以分为以下几种

  • compile
    • testCompile
    • androidTestcompile
    • debugCompile
    • releaseCompile
  • implementation
    • testImplementation
    • androidTestImplementation
    • debugImplementation
    • releaseImplementation
  • provided
  • api

就以上类型,针对仔细说明

compile

从依赖上讲,用compile修饰的配置会传递依赖,而大多数的依赖冲突都是由compile产生的,什么是传递依赖?
打个比方:我们现在有libA,然后libB用compile依赖libA,最后libC依赖libB。那这个时候,libC自然能够使用libA的内容,因为libA的内容跟随这个libB而传递到了libC中。如下图:

img_7dedc77a28335ff2c33bb0f0380330b7.png
compile依赖

而且compile得越多,所产生的依赖树也就越长,也就越难控制。

从编译上讲,使用compile配置的依赖项,会跟随打包流程将源码打包到apk中。

testcompile和androidTestcompile

这两个依赖项配置和compile是差不多的,也会产生传递依赖,唯一不同的是,testcompile和androidTestcompile不会参与源码打包,只会参与测试包的打包,并且只有在测试模式下启动才会生效,debug和release包不生效。

debugCompile和releaseCompile

  • debugCompile
    只在buildType为debug的时候参与打包,release不参与打包,比方说我们的内存泄露检测工具-LeakCanary,其实我们也只是需要在debug模式下打包调试,而发布release版本就需要进行打包了,所以用debugCompile来进行配置
  • releaseCompile
    releaseCompile和debugCompile完全相反,只在release模式下参与打包,应用场景不是很多。

implementation

implementation 是Gradle4.1(Android studio3.0)新增的依赖方式,implementation和compile不同,该依赖方式不会产生传递依赖,implementation有点像provided和、debugCompile和releaseCompile的集合体。
来个具体场景,例如:有libA公共库,libB通过implementation依赖libB,然后app无论通过什么方式依赖libB,lib1的依赖都不会传递过来,必须要在app中重新依赖一次。如下图:

img_3bcb9c12ffbd19c5d287a51c8f4e29df.png
implementation依赖

使用implementation有什么好处呢?

  • 很大程度减少重复依赖的问题
  • 在开源 lib 的时候尽量采用implementation的方式依赖一些v4、v7包

剩余的implementation

和前面的compile一样,只是implementation不会产生传递依赖,就不一一阐述了。

provided

只参与编译,不参与打包。例如说有libB依赖了libA,moduleC又同时依赖了libA和libB,那么libB就可以使用provided来依赖libA。

api

api是Gradle4.1(Android studio3.0)新增的依赖方式,其作用于compile基本一致。

总结

以上是就是dependencies的类型讲解,对于使用Gradle plugin 3.X.X以上版本的gradle,我们应该转而使用implementation,减少compile的使用,避免依赖冲突的产生。如果我们有开放的lib,那么更加应该使用implementation依赖一些v4、v7的包,尽量少给lib的使用者造成困扰。

最后

未完待续、敬请期待!
免为其难的关注一下公众号吧!!

img_f0790f8ed7e67ea3b5a4d6bc3f65b0aa.png
生活实在是太苦啦
img_b246dc41a34e6fdd3598d113e0f65194.jpe
FullScreenDeveloper
目录
相关文章
|
4月前
|
Java 关系型数据库 MySQL
Gradle中的依赖Dependencies说明与使用总结
Gradle中的依赖Dependencies说明与使用总结
107 0
|
4月前
|
Java 关系型数据库 MySQL
Gradle笔记 六 Gradle 中的Dependencies
Gradle笔记 六 Gradle 中的Dependencies
45 0
|
Java 关系型数据库 MySQL
Gradle 的Dependencies
Gradle 的Dependencies
Gradle 的Dependencies
|
6月前
|
SQL 人工智能 移动开发
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
Android Studio插件版本与Gradle 版本对应关系
|
7月前
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
112 2
|
缓存 Android开发
Android Studio中如何清理gradle缓存
Android Studio中如何清理gradle缓存
|
Android开发
Android Studio中修改gradle插件版本和Gradle版本
Android项目中,我们一般要设置gradle插件版本和gradle版本。 项目根目录下的build.gradle文件中,通过classpath可以指定gradle插件的版本。
|
Java Android开发
Android如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
Android如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
481 0
|
4月前
|
开发工具 Android开发 开发者
Android 项目编译 Gradle 配置说明
Android 项目编译 Gradle 配置说明
141 0
|
5月前
|
Java Maven Android开发
android之gradle配置仓库与引入依赖
android之gradle配置仓库与引入依赖
229 0