1. 統(tǒng)一SDK版本管理配置
2. build.gradle 使用each循環(huán)引入第三方框架
3. build.gradle中buildConfigField使用
4. 優(yōu)化res資源管理, 使用SourceSets資源分包
5. gradle配置模板
為了提高項目開發(fā)效率,在實際項目開發(fā)過程中往往會引入一些開源框架,還有項目中使用的各種Module,當引入Module過多時最好提供一種統(tǒng)一的方式去管理版本號,如:compileSdkVersion、buildToolsVersion、minSdkVersion等。
我在網上找了很多資料,網上提供了好幾種方案,寫法也有好幾種,不過最終原理其實都是差不多的,主要原理分為以下幾步:
一. 創(chuàng)建配置文件config.gradle
配置信息就放在這個文件里, 文件名字隨便取,后綴是.gradle即可。
情況一:文件放在項目的 app目錄下,如下圖:appConfig.png

情況二:文件放在項目的 項目根目錄下,如下圖:config.png
config.png

二. 找到配置文件config.gradle
情況一:文件放在項目的 app目錄下
一般來說,放在 app目錄下config.gradle配置信息,只能在主項目中引用,引用方式:
在app目錄下的build.gradle文件開頭,加上apply from: 'config.gradle'。如下圖

情況二:文件放在項目的 app目錄下
這種情況,config.gradle配置信息可以全局使用,在主工程和Module下都可以使用,統(tǒng)一SDK版本配置需要使用這種方式,引用方式:
在項目根目錄下的build.gradle文件加上apply from: 'config.gradle'。如下圖

三. 引用配置信息里面的內容
1. config.gradle應該怎么寫
網上有好幾種寫法,下面是我個人認為比較方便的方案
ext {
//sdk版本管理
CompileSdkVersion = 26 // 用于編譯的SDK版本
BuildToolsVersion = "28.0.3" // 用于Gradle編譯項目的工具版本
ApplicationId = "com.wanji.shop" //包名
MinSdkVersion = 19 // 最低支持Android版本
TargetSdkVersion = 26 // 目標版本
VersionCode = 1 //版本號
VersionName = "1.0"
MinifyEnabled = false //是否混淆
// App dependencies
appcompatVersion = "26.1.0"
constraintVersion = "1.1.3"
junitVersion = "4.12"
runnerVersion = "1.0.2"
espressoVersion = "3.0.2"
supportV4Version = "26.1.0"
designVersion = "26.1.0"
//公共的(系統(tǒng)的)
roots = [
//項目基本的(每個項目需要的)
"appcompatV7" : "com.android.support:appcompat-v7:${appcompatVersion}",
"constraint" : "com.android.support.constraint:constraint-layout:${constraintVersion}",
"junit" : "junit:junit:${junitVersion}",
"runner" : "com.android.support.test:runner:${runnerVersion}",
"espresso" : "com.android.support.test.espresso:espresso-core:${espressoVersion}",
]
2. build.gradle怎么引用
①: 對于ext下的變量,網上的寫法:rootProject.ext.CompileSdkVersion或者ext.CompileSdkVersion,其實直接引用變量名CompileSdkVersion就可以了。
②:對于:roots數(shù)組,直接roots.appcompatV7這樣引用就可以了??傮w寫法如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion CompileSdkVersion
defaultConfig {
applicationId ApplicationId
minSdkVersion MinSdkVersion
targetSdkVersion TargetSdkVersion
versionCode VersionCode
versionName VersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled MinifyEnabled
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation roots.appcompatV7
implementation roots.constraint
testImplementation roots.junit
androidTestImplementation roots.runner
androidTestImplementation roots.espresso
}