1.在项目的root创建config.gradle,在文件里加入如下代码
ext{
//true 组件模式 false 集成模式
isMoudle = false
}
2.在root的build.gralde中引入config.gradle
apply from: "config.gradle"
3.在android闭包内加入
if (isMoudle) {
buildConfigField("boolean", "IS_MODULE", "true")
} else {
buildConfigField("boolean", "IS_MODULE", "false")
}
buildConfigField 表示在当前的项目的build.config文件里添加了一个boolean类型的变量 IS_MODULE
4.在dependencies里加入
if (!isMoudle) {
implementation project(':video')
implementation project(':voice')
}
只有集成模式才会依赖其他module,整个app的build.gradle 如下
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.zed3.sipua.moudlarization"
minSdkVersion 18
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
if (isMoudle) {
buildConfigField("boolean", "IS_MODULE", "true")
} else {
buildConfigField("boolean", "IS_MODULE", "false")
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation project(':base')
if (!isMoudle) {
implementation project(':video')
implementation project(':voice')
}
testImplementation 'junit:junit:4.12'
}
5.module的build.gradle里根据isModule来决定当前是一个模块还是独立的项目
if (isMoudle) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
6.如果该moudle是独立的项目,在defaultConfig中需要加入appid才能运行
//是组件 有appid
if (isMoudle) {
applicationId "com.zed3.sipua.video"
}
7.为moudle独立运行配置新的manifest和java文件夹,这样能保证在debug时独立运行,而在集成模式下不会把这些调试用的文件打包到项目中,真正做到了debug和release的分离。
sourceSets {
//是组件 用自己的manifest
if (isMoudle) {
main {
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/module']
res.srcDirs = ['src/main/res']
}
} else {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
}
}
8.module的完整buid.gradle如下
if (isMoudle) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 18
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//是组件 有appid
if (isMoudle) {
applicationId "com.zed3.sipua.video"
}
sourceSets {
//是组件 用自己的manifest
if (isMoudle) {
main {
manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/module']
res.srcDirs = ['src/main/res']
}
} else {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':base')
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
}