android组件化

关于为毛要组件化就不多解释了。
组件化首先就要想到要有一个application,多个模块moudle,一个用来依赖的moudule:

android组件化_第1张图片

这个app依赖moudleA和moudleB,然后moudleA和moudleB分别依赖moduleLib。

因为要整体APP可以运行,模块之间又可以单独运行,那么就要有全局的字段来标记是拆分还是合并。那么就需要定义一个全局的标识字段:所以在gradle.properties里面定义isDebug

这个时候因为可以拆分运行,就需要有不同的manifest:

android组件化_第2张图片

通过isDebug字段区分使用manifest

 sourceSets {
        main {
            if (isDebug.toBoolean()) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
            }
        }
    }

**区分运行拆分和合并:(区分编译成APP还是lib)**
if(isDebug.toBoolean()){
    apply plugin: 'com.android.application'
}else{
    apply plugin: 'com.android.library'
}

关于APP的依赖,也要修改

 if (!isDebug.toBoolean()) {
        compile project(':moduleA')
        compile project(':moduleB')
    } else {
        compile project(':moduleLib')
    }

记得修改isDebug字段需要同步gradle。

这个时候只要修改isDebug字段就可以搞定拆分和合并运行的操作。这个时候会遇到一些问题:

  1. module各自的资源文件同名
    可以通过gradle改写:resourcePrefix “moduleA_”。
  2. 关于application强制转换报错
    尽量不要使用(MOUMOUAplication)getApplication。不要在application里面写实现方法。
  3. 关于activity的跳转
    现在有三方的跳转库,不是很推荐,因为都还不太完善。可以通过定义包名直接跳转,稍微大点的数据传递推荐使用eventbus。
Intent intent = new Intent();
                    Class clazz = Class.forName("com.diya.moduleb.ActivityModuleB");
                    intent.setClass(ActivityModuleA.this, clazz);
                    startActivity(intent);
  1. 关于举例:
    这里有一个我自己写的简单的测试demo,不要在意写的垃圾这个细节,毕竟只是个demo:
    https://github.com/Diya-Wang/ModuleDemo
  2. 关于组件化:
    个人认为虽然代码模块化后开发中增加了复杂度,但是对于模块的拆分管理和使用毕竟是比较方便。对于大的项目有着很好的支持作用。个人认为,如果你只是一个简单的小项目,没有必要搞这么复杂,只需要简单的拆分功能模块就可以。但是组件化还是要有自己的理解。
    组件化对于大型APP有着不用解释的作用。现在很多大型企业搞着各种组件化的开发,时代在进步。。。所以:如果你的APP够大,如果你的APP还各种柔和在一起。赶紧开始第一步,慢慢的拆分功能模块吧,等你用个一年半年时间拆分出各种功能模块,那时候搞成完美的组件化开发,也是分分钟的事儿啊。

你可能感兴趣的:(android)