目的:
在版本迭代过程中,经常遇到一种情况:一旦android SDK、android support包、gradle build tool以及一些第三方包一旦推出新版本,为了保持对新特性的支持,我们需要对每个module中的build.gradle文件都进行一次手动修改(如appcompat-v7包),费时又费力。那么有没有办法对这些依赖进行统一管理呢,答案是肯定的。
方法一:分类属性配置
- 在项目的根目录创建一个gradle配置文件config.gradle,项目中所有的依赖只要在这个文件中统一配置即可。格式如下(内容根据需要进行修改):
ext {
android = [
compileSdkVersion: 24,
buildToolsVersion: "24.0.2",
applicationId : "com.carme.carmerchant",
minSdkVersion : 15,
targetSdkVersion : 22,
versionCode : 3,
versionName : "1.0.3"
]
dependencies = [
"test" : "junit:junit:4.12",
"appcompat-v7" : "com.android.support:appcompat-v7:25.0.0",
"support-v4" : "com.android.support:support-v4:25.0.0",
"support_design" : "com.android.support:design:25.0.0",
"rxjava" : "io.reactivex:rxjava:1.2.0",
"rxandroid" : "io.reactivex:rxandroid:1.2.1",
"retrofit" : "com.squareup.retrofit2:retrofit:2.1.0",
"converter-gson" : "com.squareup.retrofit2:converter-gson:2.1.0",
"adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava:2.1.0",
"logging-interceptor" : "com.squareup.okhttp3:logging-interceptor:3.4.1",
"pullToRefresh" : "com.carme.module:pullToRefresh:1.0.13",
"glide" : "com.github.bumptech.glide:glide:3.7.0",
"glide-okhttp3" : "com.github.bumptech.glide:okhttp3-integration:1.4.0@aar",
"recyclerview" : "com.android.support:recyclerview-v7:25.0.0",
"bugly" : "com.tencent.bugly:nativecrashreport:3.0",
"bugly-upgrade" : "com.tencent.bugly:crashreport_upgrade:1.1.7",
"jpush" : "cn.jiguang:jpush:2.2.0",
"hotfix" : "com.taobao.android:alisdk-hotfix:1.4.0",
"rxlifecycle" : "com.trello:rxlifecycle:0.8.0",
"rxlifecycle-components": "com.trello:rxlifecycle-components:0.8.0",
"butterknife" : "com.jakewharton:butterknife:8.4.0",
"butterknife-compiler" : "com.jakewharton:butterknife-compiler:8.4.0",
"otto" : "com.squareup:otto:1.3.8",
"mpandroidchart" : "com.github.PhilJay:MPAndroidChart:v3.0.1",
"multidex" : "com.android.support:multidex:1.0.1"
]
}
- 其次在根目录的build.gradle文件中添加内容(apply from:”config.gradle”),所有的module都可以从这个(config.gradle)配置文件里读取公共参数。如图:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "config.gradle"
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.tencent.bugly:symtabfileuploader:2.0.4'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url "https://jitpack.io"
}
maven {
url 'http://192.168.51.199:8081/nexus/content/repositories/Android/'
}
maven {
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- 在各个module目录下的build.gradle文件中使用如下:
android {
compileSdkVersion rootProject .ext.android.compileSdkVersion
buildToolsVersion rootProject .ext.android.buildToolsVersion
defaultConfig {
applicationId rootProject .ext.android.applicationId
minSdkVersion rootProject .ext.android.minSdkVersion
targetSdkVersion rootProject .ext.android.targetSdkVersion
versionCode rootProject .ext.android.versionCode
versionName rootProject .ext.android.versionName
}
...
}
dependencies {
...
compile rootProject .ext.dependencies[ "design"]
compile rootProject .ext.dependencies[ "appcompat-v7"]
compile rootProject .ext.dependencies[ "recyclerview-v7"]
...
}
方法二:常量属性配置
- 步骤1,2同方法一一致,在项目的根目录创建一个gradle配置文件config.gradle,然后在根目录build.gradle中引入。需要注意的一点是在文件中配置的是依赖常量。格式如下:
ext {
//Version of compile sdk
COMPILE_SDK_VERSION = 23
//Version of Android build tool
BUILD_TOOLS_VERSION = "23.0.3"
//Min version of Android sdk
MIN_SDK_VERSION = 9
//Version of target Android sdk
TARGET_SDK_VERSION = 23
//Use progurad or not
MINIFY_ENABLED = true
MINIFY_DISABLED = false
//Version of "com.android.support:appcompat-v7"
APPCOMPAT_VERSION = '23.2.0'
//Version of "junit":
JUNIT_VERSION= '4.12'
}
- 在module中的build.gradle中使用情况如下:
apply plugin : 'com.android.library'
android {
compileSdkVersion COMPILE_SDK_VERSION
buildToolsVersion BUILD_TOOLS_VERSION
defaultConfig {
minSdkVersion MIN_SDK_VERSION
targetSdkVersion TARGET_SDK_VERSION
versionCode 1
versionName "1.0.0"
}
buildTypes {
release {
minifyEnabled MINIFY_DISABLED
proguardFiles getDefaultProguardFile('proguard-android.txt' ), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir : 'libs', include: ['*.jar' ])
testCompile "junit:junit: ${JUNIT_VERSION} "
compile "com.android.support:appcompat-v7: ${APPCOMPAT_VERSION} "
}
方法三:在gradle.properties中配置依赖常量
- 如:在gradle.properties中配置相应的版本号(可以理解为定义一个常量参数)
- 在单个module中的build.gradle中使用如下: