项目由于是有组件分模块开发,所以会有很多个module,每一个module下都有一个gradle文件,其中都涉及到各种版本号的设置、尤其是编译版本相关,如果一个改变其他的都得跟着变否则就可能导致编译不过,这时候就可以把基本信息抽调出来另外自定义一个gradle专门配置这些基本信息,需改更改版本号时,只需要改配置的gradle了。
先贴一张我的项目结构图出来
18561089-CB47-4200-8D16-E48F564AECA1.png
apply plugin: 'com.android.library'
android {
compileSdkVersion 25 //编译sdk版本
buildToolsVersion "25.0.3" //构建工具版本
//
defaultConfig {
minSdkVersion 14 //最小适应sdk版本
targetSdkVersion 25 //目标sdk版本
versionCode 1 //app版本号
versionName "1.0" //app 版本名
resConfigs "zh" //语言配置
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile project(':base')
}
我的项目里一跟分了很多模块,每个模块都有一个gradle,其中 版本信息都是一样的,如果纯粹这么写,我改一个gradle 里的版本,然后每个都要改一遍就很麻烦了,所以我们需要建一个config.gradle 的文件来管理。
android {
compileSdkVersion 25 //编译sdk版本
buildToolsVersion "25.0.3" //构建工具版本
//
defaultConfig {
minSdkVersion 14 //最小适应sdk版本
targetSdkVersion 25 //目标sdk版本
versionCode 1 //app版本号
versionName "1.0" //app 版本名
resConfigs "zh" //语言配置
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
compile 'com.android.support:appcompat-v7:25.3.1'
步骤:
1、在根目录建config.gradle
360C14E7-23A8-449B-AC2E-BEE7D8901224.png
在config.gradle 中我们可以这么写
//support 包的版本号
def supportVersion = "25.2.0"
ext {
//版本信息配置
version = [
"buildToolsVersion": "25.0.2",
"compileSdkVersion": 25,
"minSdkVersion" : 15,
"targetSdkVersion" : 25,
"versionCode" : 260,
"versionName" : "2.6.1"
]
//support 包相关包的引用
dependencies = [
"support-v4" : "com.android.support:support-v4:${supportVersion}",
"appcompat-v7" : "com.android.support:appcompat-v7:${supportVersion}",
"recyclerview-v7" : "com.android.support:recyclerview-v7:${supportVersion}",
"design" : "com.android.support:design:${supportVersion}",
"constraint-layout" : "com.android.support.constraint:constraint-layout:1.0.2"
]
}
2、在项目根目录的build.gradle中apply 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.3'
classpath 'com.meituan.android.walle:plugin:1.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
3、在所有Module下的gradle中引用这些配置
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.version.compileSdkVersion
buildToolsVersion rootProject.ext.version.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.version.minSdkVersion
targetSdkVersion rootProject.ext.version.targetSdkVersion
versionCode rootProject.ext.version.versionCode as int
versionName rootProject.ext.version.versionName
resConfigs "zh"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile rootProject.ext.dependencies["appcompat-v7"]
testCompile 'junit:junit:4.12'
compile project(':base')
}
这样就大功告成了,如果我们需要更改编译版本号,只需要改掉config.gradle中的对应的版本号就可以,其余任何地方都不需要改动。