- compile
- apk
- provided
- testCompile
- androidTestCompile
3.0版本之后,新增两个指令 - implement
- api
在3.0版本中,compile 指令被标注为过时方法,而新增了两个依赖指令,一个是implement 和api,这两个都可以进行依赖添加,但是有什么区别呢?
api 指令
完全等同于compile指令,没区别,你将所有的compile改成api,完全没有错。
implement指令
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
有时候可能你必须和一个只在特定设备上工作的SDK打交道,比如特定厂商的蓝牙SDK,为了能够编译该代码,你需要将SDK添加至编译类路径,你并不需要添加SDK到你的APK中,因为它早就存在于该设备中,这就是所谓的依赖配置
compile
不仅会将依赖添加至类路径,还会打包到apk
apk
该依赖只会被打包到apk,不会添加到编译类路径,provided则完全相反,这两个配置只适用于jar依赖,如果是module依赖,会导致错误
testCompile、androidTestCompile
添加用于测试的依赖库,在运行相关的测试任务时,这些配置会被使用,并且在添加如JUnint、Espresso测试框架时特别有用
依赖的版本
语义化版本
版本化是依赖管理的重要部分,将依赖添加到JCenter等依赖仓库时,约定遵循了一套版本化规则,我们称之为语义化版本,在语义化版本中,版本数字的格式一般为major.minor.patch 数字按照下列规则依次增加
- 当做不兼容的API时,major版本会增加
- 当以向后兼容的方式添加功能时,minor版本增加
- 当修复一些bug时,patch版本增加
动态化版本
在某些情况下,你可能希望在每次构建你的应用或依赖库时,都能够获取到最新的依赖,要想做到这一点,最好的实现方式就是动态化版本。
例如:
dependencies{
compile 'com.android.support:support-v4:22.2.+'
compile 'com.android.support:appcompat-v7:22.2+'
compile 'com.android.support:recyclerview-v7:+'
}
第一行,是要告知Gradle要获取最新的patch版本
第二行,是要告知Gradle要获取最新的minor版本
第三行,是要告知Gradle获取依赖库的最新版本
注意看每一行最后的冒号后面的东西
22.2.+
22.2+
+
在使用动态化版本时,需要格外小心,如果你允许Gradle获取最新版本,那么很可能Gradle获取的依赖版本并不稳定,它会导致构建中断。