随着Android项目越来越大,每个项目都会分成各个小模块方便管理,而每个模块都有各自的编译配置,因此统一配置是需要考虑的一个问题.以下是我比较喜欢的一种配置方式.
1.在根目录新建config.gradle文件.
内容如下,其中ext是gradle提供的一个ExtensionAware类型的属性,本质是一个map.
ext.config = [
android: [
compileSdkVersion : 29,
buildToolsVersion : "29.0.3",
minSdkVersion : 21,
targetSdkVersion : 29,
sourceCompatibility: JavaVersion.VERSION_1_8,
targetCompatibility: JavaVersion.VERSION_1_8,
multiDexEnabled : false,
],
version: [
versionCode : 1,
versionName : '1.0.27'
],
dependencies : [
okhttp: 'com.squareup.okhttp3:okhttp:3.14.2',
okio : 'com.squareup.okio:okio:1.17.3',
gson : 'com.google.code.gson:gson:2.8.5',
]
]
2.在根build.gradle文件当中,让所有的project引入config.gradle文件.
allprojects {
apply from: "${rootDir}/config.gradle"
repositories {
google()
jcenter()
}
}
3.为每个模块增加配置
配置好了之后,我们在模块的gradle文件当中就可以引用到配置的ext.config了.
如下所示,在配置文件当中直接使用config,这样当版本或者配置发生变化时,就可以一键更改所有的配置信息了.
android {
compileSdkVersion config.android.compileSdkVersion
buildToolsVersion config.android.buildToolsVersion
defaultConfig {
minSdkVersion config.android.minSdkVersion
targetSdkVersion config.android.targetSdkVersion
versionCode config.version.versionCode
versionName config.version.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility config.android.sourceCompatibility
targetCompatibility config.android.targetCompatibility
}
}