对SDK版本和在组建开发中对应用名进行统一管理。
首先在project目录下新建一个gradle文件,如config.gradle文件如下:
ext {
// false: 组件模式
// true :集成模式
isModule = true
android = [
compileSdkVersion: 26,
minSdkVersion : 14,
targetSdkVersion : 26,
versionCode : 1,
versionName : "1.0"
]
appId = ["app" : "com.dongnao.dnrouter",
"module1": "com.dongnao.module1",
"module2" : "com.dongnao.module2" ]
supportLibrary = "26.1.0"
dependencies = [
"appcompat-v7" : "com.android.support:appcompat-v7:${supportLibrary}",
]
}
然后在project下的build.gradle开头把config.gradle引入
//相当于引入头文件 将 config中的内容引入进来
apply from: "config.gradle"
在module下的gradle中,先要引入配置gradle的节点设置全局,如下:
def cfg = rootProject.ext.android
def appId = rootProject.ext.appId
android {
compileSdkVersion cfg.compileSdkVersion
defaultConfig {
minSdkVersion cfg.minSdkVersion
targetSdkVersion cfg.targetSdkVersion
versionCode cfg.versionCode
versionName cfg.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
//添加一条 boolean类型的变量
buildConfigField("boolean","isModule",String.valueOf(isModule))
buildConfigField("String","projectName","\"${String.valueOf(project.getName())}\"")
//组件模式下
if (!isModule){
applicationId appId['module2']
}
//资源配置
sourceSets{
main{
//在组件模式下 使用不同的manifest文件
if(!isModule){
manifest.srcFile 'src/main/module/AndroidManifest.xml'
java.srcDirs 'src/main/module/java','src/main/java'
}else{
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
对于dependencies:
引入头:
def librarys = rootProject.ext.dependencies
引入:librarys.each { k, v -> api v }
在组建化开发中,需要根据模式配置module还是library,如果是module的话,就还需要配置applicationId,Manifest等。
//根据isModule标签动态的切换 集成/组件模式
if (isModule){
apply plugin: 'com.android.library'
}else{
apply plugin: 'com.android.application'
}
module下配置包名
//组件模式下
if (!isModule){
applicationId appId['module2']
}
配置不同模式下的资源文件,在module模式下应该有自己的launcherActivity。
//资源配置
sourceSets{
main{
//在组件模式下 使用不同的manifest文件
if(!isModule){
manifest.srcFile 'src/main/module/AndroidManifest.xml'
java.srcDirs 'src/main/module/java','src/main/java'
}else{
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
把gradle中配置同步到java层BuildConfig下。
//添加一条 boolean类型的变量 buildConfigField("boolean","isModule",String.valueOf(isModule)) //String 类型. 参数:String 代表类型,“projectName”代表fieldName,最后:代表值(如果是String类型,需要自己加"") buildConfigField("String","projectName","\"${String.valueOf(project.getName())}\"")