组件化

作者: 34sir | 来源:发表于2019-02-01 11:33 被阅读3次

    为什么组件化?

    • 解耦
    • 解决项目庞大 编译慢

    怎么做?

    思路:
    1.模块化项目 可按功能或者业务对项目进行划分重构
    2.动态控制模块依赖

    模块化项目可以按照各自项目实际情况 不多做介绍

    如何动态依赖?

    配置properties文件

    properties文件是java的配置文件
    作用:对项目进行一系列的配置 包括:版本号 版本信息 开发模式 keystore等等

    几个知识点:

    • 新建AS项目会默认生成gradle.propertieslocal.properties文件
    • Gradle 内置了对gradle.properties的使用方式
      栗子:
      gradle.properties:
    something = "hello 34sir"
    

    build.gradle:

    println something //可以直接使用这个变量
    
    • 使用其他的 .properties文件
      例如上文提到的local.properties
    Properties properties = new Properties()  
    properties.load(new FileInputStream("local.properties"))
    println properties.getProperty("something")
    

    或者

    def config = new ConfigSlurper().parse(new File("local.properties").toURL()) //这种方式除了加载 properties文件外,还可以加载 groovy 文件 或者 gradle 文件
    println config.something
    

    使用properties文件的配置

    利用配置文件的DEVELOP_MODE变量 动态更改依赖方式(application 还是 library)
    gradle.properties:

    DEVELOP_MODE = true
    

    build.gradle:

    if (DEVELOP_MODE.toBoolean) { //如果当前是组件化模式
        apply plugin: 'com.android.application'
    } else { //集成模式
        apply plugin: 'com.android.library'
    }
    

    遇到的问题

    AndroidManifest合并

    每个组件都会有一个清单文件 那么如果这些清单文件都含有各自的Application 这样肯定会产生冲突
    解决方案和上述动态更换依赖方式类似:
    通过DEVELOP_MODE控制动态依赖的清单文件
    build.gradle文件中进行如下配置:

      sourceSets {
            main {
                if (DEVELOP_MODE.toBoolean()) {
                    manifest.srcFile 'src/main/debug/AndroidManifest.xml'  //组件模式下依赖此清单文件
                } else {
                    manifest.srcFile 'src/main/release/AndroidManifest.xml' //集成模式下依赖此清单文件
                }
            }
        }
    

    资源冲突

    解决方案:

    • 命名规范上面强制要求 按模块划分各个模块的命名规范
    • resourcePrefix "girls_" 强制代码审查

    模组间通信

    由于模组间是相互隔离的 那么某些类的调用就不能用常规方式
    很容易想到一个方案:反射

    但是 众所周知 频繁反射会带来很大的性能开销 于是我们采用路由的方案:
    项目初始化的时候 一次性反射构造所有模块的router 在所有模块都依赖的公共模块中存在一个公共router管理类Grouter,此类完成通信的中转 相当于路由器的功能

    相关文章

      网友评论

          本文标题:组件化

          本文链接:https://www.haomeiwen.com/subject/kxfleftx.html