Android项目的依赖管理是通过gradle来配置的,下面的代码我们在我们的项目中见的很多,那这些gradle都是什么意思呢?
1.compile 'com.android.support:appcompat-v7:23.4.0'
2.provided 'com.squareup.dagger:dagger-compiler:1.2.1'(网络下载)
provided fileTree(include: '*.jar', dir: '../../../core/Base/Gdroid/libs')(本地路径)
3.compile files('libs/picasso-2.4.0.jar')
4.compile project(':androidPullToRefresh')
2.X vs 3.X
compile(api)指令
如果你的jar包/依赖代码 在编译的时候需要依赖,在运行的时候也需要,那么就用compile.前提:apply plugin: 'war’或者apply plugin: ‘java’。
compile是从repository(默认是jCenter())里下载一个依赖包进行编译并打包。
如下:
compile ‘org.springframework:spring-webmvc:4.3.9.RELEASE’
compile files(‘libs/picasso-2.4.0.jar’)
compile files是从本地的libs目录下寻找picasso-2.4.0.jar这个文件进行编译并打包。类似的命令有
compile fileTree(dir: ‘libs’, include: ‘*.jar’)
意思是将libs目录下所有jar文件进行编译并打包。
provided(compileOnly)指令
provided只提供编译支持,但是不会写入apk。比如我在编译的时候对某一个jar文件有依赖,但是最终打包apk文件时,我不想把这个jar文件放进去,可以用这个命令。
testCompile(testImplementation)
testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。
apk(runtimeOnly)
只在生成apk的时候参与打包,编译时不会参与,很少用。
debugCompile(debugImplementation)
debugCompile 只在debug模式的编译和最终的debug apk打包时有效
releaseCompile(releaseImplementation)
Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。
implementation指令
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
简单的说,就是使用implementation指令的依赖不会传递。例如,有一个module为testsdk,testsdk依赖于gson:
implementation ‘com.google.code.gson:gson:2.8.2’
这时候,在testsdk里边的java代码是可以访问gson的。
另一个module为app,app依赖于testsdk:
implementation project(’:testsdk’)
这时候,因为testsdk使用的是implementation 指令来依赖gson,所以app里边不能引用gson。
但是,如果testsdk使用的是api来引用gson:
api ‘com.google.code.gson:gson:2.8.2’
则与gradle3.0.0之前的compile指令的效果完全一样,app的module也可以引用gson。这就是api和implementation的区别。
更多细节可访问:
android gradle 3.0.0 中依赖指令implementation、api 的区别
安卓工程依赖新方式:Implementation vs API dependency
exclude指令
用于解决重复依赖
具体可参考下面的一篇文章:
com.android.support冲突的解决办法
参考资料
Android Studio3.x新的依赖方式(implementation、api、compileOnly)
升级Gradle3.0
https://wfeii.github.io/gradle/%E5%8D%87%E7%BA%A7Gradle3.0/
Gradle依赖项学习总结,dependencies、transitive、force、exclude的使用与依赖冲突解决
http://www.paincker.com/gradle-dependencies
Gradle for Android(三) 依赖管理
https://www.jianshu.com/p/b8ad7ea0511b