在Gradle中添加第三方库的依赖一直很方便,添加一条字符串就可以实现第三方库的自动下载,修改版本数字就能控制第三方库的版本。
但是好用也不能乱用,毕竟都是字符串的复制粘贴,缺乏好的管理会对一个项目的长期维护造成不必要的麻烦。比如Android的官方支持库隔一段时间就会升级,如果有很多module那么光改个版本号就很麻烦了。
我最讨厌麻烦,所以写项目的过程中摸索出了以下两种我觉得比较好的方式去管理依赖(只针对安卓工程)
在工程根目录下的gradle.properties
文件里可以创建一个全局的常量
SUPPORT_LIBRARY_VERSION=25.3.1
添加Android支持库依赖时版本号用这个常量替代(注意用双引号)
dependencies {
compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY_VERSION}"
compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY_VERSION}"
compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY_VERSION}"
compile "com.android.support:design:${SUPPORT_LIBRARY_VERSION}"
}
这样就可以简单的管理Android支持库的版本,升级支持库版本的时候只需要改一个地方就可以了。当然,这只做到了对版本号的统一管理,如果要对依赖进行彻底的集中化配置,可以参考下面的做法。
在Project的build.gradle
文件中引用一个外部文件
apply from: 'dependencies.gradle'
在Project的build.gradle同级目录下创建一个新的文件dependencies.gradle
,然后可以在这里创建一些外部变量
ext {
supportLibraryVersion = '25.3.1'
compileDependencies = [
appcompat_v7: "com.android.support:appcompat-v7:${supportLibraryVersion}",
cardview_v7: "com.android.support:cardview-v7:${supportLibraryVersion}",
recyclerview_v7: "com.android.support:recyclerview-v7:${supportLibraryVersion}",
design: "com.android.support:design:${supportLibraryVersion}",
support_v4: "com.android.support:support-v4:${supportLibraryVersion}",
support_annotations:"com.android.support:support-annotations:${supportLibraryVersion}",
okHttp: 'com.squareup.okhttp3:okhttp:3.3.1',
gson: 'com.google.code.gson:gson:2.8.0',
rxJava: 'io.reactivex.rxjava2:rxjava:2.0.8',
rxAndroid: 'io.reactivex.rxjava2:rxandroid:2.0.1'
]
testDependencies = [
junit: 'junit:junit:4.12',
mockito: 'org.mockito:mockito-core:1.9.5',
assertj: 'org.assertj:assertj-core:1.7.1',
espresso: 'com.android.support.test.espresso:espresso-core:2.2.2',
robolectric: 'org.robolectric:robolectric:3.1.1'
]
}
然后在添加依赖时就是使用这些变量了
dependencies {
def compileDependencies = rootProject.ext.compileDependencies
def testDependencies = rootProject.ext.testDependencies
compile compileDependencies.appcompat_v7
compile compileDependencies.rxJava
testCompile testDependencies.junit
testCompile testDependencies.mockito
....
}
最后,以防一些新手误会,要说明下,创建一个dependencies.gradle
文件并不是必须的,你也可以直接写在Project的build.gradle
里面。我只是想分的清楚一点��
Gradle依赖管理基础 https://docs.gradle.org/current/userguide/artifact_dependencies_tutorial.html
Gradle依赖管理 https://docs.gradle.org/current/userguide/dependency_management.html