Gradle - dependencies 的类型与区别

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中。如下图:

而且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中重新依赖一次。如下图:

使用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基本一致。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值