項目由于是有組件分模塊開發,所以會有很多個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中的對應的版本號就可以,其余任何地方都不需要改動。