实际意义:
将工程各个模块分离,并且能够独立运行,方便开发和测试
项目改造步骤
1.项目目录下创建config.gradle文件,记录公用的gradle设置,对版本等进行统一管理
//注意:自定义的变量请使用 ext_ 开头,方便全局搜索
//扩展
ext {
//false:组件模式
//true:集成模式
ext_isModule = true
//android的版本相关设置
ext_android = [
compileSdkVersion: 26,
minSdkVersion : 14,
targetSdkVersion : 26,
versionCode : 1,
versionName : "1.0"
]
//各个组件的appId
ext_appId = [
"app" : "com.tyh.wigdit.zujianhua",
"module1": "com.tyh.wigdit.module1",
"module2": "com.tyh.wigdit.module2"
]
//support库的版本 recyclerview等都用这个版本
ext_supportLibrary = "27.0.1"
ext_dependencies = [
"appcompat-v7": "com.android.support:appcompat-v7:${ext_supportLibrary}",
]
}
2.在项目的gradle文件中,引用config.gradle
apply from: "config.gradle"
3.对library进行修改,使其具备在library和application之间进行切换的能力
3.1增加library转换成Application后使用的AndroidManifest.xml文件及其他需要的文件夹,如java文件夹等
3.2修改library的build.gradle文件
//通过ext_isModule控制是application 还是library
if (ext_isModule) {
apply plugin: 'com.android.application'
} else{
apply plugin: 'com.android.library'
}
def cfg = ext_android
def appId = ext_appId
def dependss = ext_dependencies
android {
compileSdkVersion cfg.compileSdkVersion
defaultConfig {
minSdkVersion cfg.minSdkVersion
targetSdkVersion cfg.targetSdkVersion
versionCode cfg.versionCode
versionName cfg.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//全局变量-->是否是组件模式
buildConfigField ("boolean","isModule",String.valueOf(ext_isModule))
//增加application状态下的其他配置
if (ext_isModule) {
//applicationId
applicationId appId["module1"]
//资源文件
sourceSets {
main{
//manifest文件
manifest.srcFile 'src/main/module/AndroidManifest.xml'
//java资源文件,
//需要给外部使用的,就放在默认的文件夹中src/main/java
//不需要给外部使用的,就放在内部文件中
java.srcDirs 'src/main/java','src/main/module/java'
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation dependss["appcompat-v7"]
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
4 对app的build.gradle进行改造
apply plugin: 'com.android.application'
//引入顶层的build.gradle文件的设置
def cfg = ext_android
def appId = ext_appId
def dependss = ext_dependencies
android {
compileSdkVersion cfg.compileSdkVersion
defaultConfig {
applicationId appId["app"]
minSdkVersion cfg.minSdkVersion
targetSdkVersion cfg.targetSdkVersion
versionCode cfg.versionCode
versionName cfg.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation dependss["appcompat-v7"]
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//组件状态下,才去引用各个组件
if (!ext_isModule) {
implementation project(':module1')
}
}
通过以上的设置,项目完成了组件化开发的改造,我们可以通过config.gradle文件中的ext_isModule变量来控制组件的状态切换,