1. 统一SDK版本管理配置
2. build.gradle 使用each循环引入第三方框架
3. build.gradle中buildConfigField使用
4. 优化res资源管理, 使用SourceSets资源分包
5. gradle配置模板
为了提高项目开发效率,在实际项目开发过程中往往会引入一些开源框架,还有项目中使用的各种Module,当引入Module过多时最好提供一种统一的方式去管理版本号,如:compileSdkVersion、buildToolsVersion、minSdkVersion等。
我在网上找了很多资料,网上提供了好几种方案,写法也有好几种,不过最终原理其实都是差不多的,主要原理分为以下几步:
一. 创建配置文件config.gradle
配置信息就放在这个文件里, 文件名字随便取,后缀是.gradle即可。
情况一:文件放在项目的 app目录下,如下图:appConfig.png
情况二:文件放在项目的 项目根目录下,如下图:config.png
二. 找到配置文件config.gradle
情况一:文件放在项目的 app目录下
一般来说,放在 app目录下config.gradle配置信息,只能在主项目中引用,引用方式:
在app目录下的build.gradle文件开头,加上apply from: 'config.gradle'。如下图
情况二:文件放在项目的 app目录下
这种情况,config.gradle配置信息可以全局使用,在主工程和Module下都可以使用,统一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"
//公共的(系统的)
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数组,直接roots.appcompatV7这样引用就可以了。总体写法如下:
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
}