Gradle与项目组件化

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'
}

你可能感兴趣的:(Gradle与项目组件化)