架构师(三)——组件化部署

接上文

ext {

    // 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式
    // false: 组件化模式(子模块可以独立运行),true :集成化模式(打包整个项目apk,子模块不可独立运行)
    isRelease = false
    ......
}

主模块的build.gradle

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 循环引入第三方库
    support.each { k, v -> implementation v }

    implementation project(':common') // 公共基础库

    // 如果是集成化模式,做发布版本时。各个模块都不能独立运行了
    if (isRelease) {
        implementation project(':order')
        implementation project(':personal')
    }
}

组件的build.gradle

if (isRelease) { // 如果是发布版本时,各个模块都不能独立运行
    apply plugin: 'com.android.library'
} else {
    apply plugin: 'com.android.application'
}

def rootAndroidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies

android {
    compileSdkVersion rootAndroidId.compileSdkVersion
    buildToolsVersion rootAndroidId.buildToolsVersion
    defaultConfig {
        if (!isRelease) { // 如果是集成化模式,不能有applicationId
            applicationId appId.order // 组件化模式能独立运行才能有applicationId
        }
        minSdkVersion rootAndroidId.minSdkVersion
        targetSdkVersion rootAndroidId.targetSdkVersion
        versionCode rootAndroidId.versionCode
        versionName rootAndroidId.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        // 这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值(必须是String)
        // 为什么需要定义这个?因为src代码中有可能需要用到跨模块交互,如果是组件化模块显然不行
        // 切记:不能在android根节点,只能在defaultConfig或buildTypes节点下
        buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
    }
    ......
}

组件化和集成化的区别在于 apply plugin和applicationId
组件创建的时候,最好创建为module,如果创建成 library,会缺少manifest配置和activity,组件化的时候还要拷贝过去,比较麻烦

测试环境隔离

// 配置资源路径,方便测试环境,打包不集成到正式环境
sourceSets {
    main {
        if (!isRelease) {
            // 如果是组件化模式,需要单独运行时
            manifest.srcFile 'src/main/debug/AndroidManifest.xml'
        } else {
            // 集成化模式,整个项目打包apk
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java {
                // release 时 debug 目录下文件不需要合并到主工程
                exclude '**/debug/**'
            }
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.组件化项目的意义 不相互依赖 ,可以相互交互,高度解耦 ,分模块打包,测试,便于统一管理....这里简单说说 ...
    面熟_gson阅读 525评论 0 0
  • 一 gradle语法 Gradle环境 1.Android studio配置 classpath'com.and...
    佼佼者Mr阅读 839评论 0 1
  • 1、组件化项目的意义 开发需求:不相互依赖、可以相互交互、任意组合、高度解耦团队效率:分模块打包、测试、统一版本管...
    migill阅读 827评论 0 6
  • 这里的组件化每个模块可以单独运行、打包、测试,可随意拆卸、随意组装,既不互相依赖又可以互相调用。是通过在一个Pro...
    CoderYuZ阅读 2,581评论 2 2
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,455评论 0 13

友情链接更多精彩内容