https://github.com/guiying712/AndroidModulePattern
首先看下插件化app的项目架构:
lib_common是整个项目的通用底层组件,可以被所有其他的组件依赖,module_girls module_main module_news是三个项目组件,他们可以互相跳转,跳转通过路由的方式,虽然组件开发的方式大大解耦了各个组件间的依赖关系,提升并行开发能力,但是这种跳转方式也带来了风险.消息传递通过eventbus,其中module_main还是整个app的入口页面.
module_app是这个app的壳工程,没有具体的业务,负责管理其他的组件和打包.比如在集成模式下打包所有组件进apk,在单独模式下只打包一个组件进apk.
1.首先要解决的问题是,如何保证每个组件在单独开发的时候能够编译成单独的module,在集成的时候能够作为lib被编译进apk.要解决这个问题就要知道单独的module和lib的区别:
在gradle文件中,module依赖的是这样的:
而lib依赖的是
在manifest文件中,module的manifest是这样的
lib的manifest是这样的
不同的地方在于,lib中自己的application是空的,而moduou中application必须不能是空的,而且还要有自己的application类.
根据这点不同,我们可以在打包的时候配置参数isModule,根据这个参数动态配置两个不同的manifest和不同的依赖,达到动态实现module或者lib的目的.每个module中也必须有一个自己的application实现类,在module模式下,module使用自己的application,在集成模式下使用app的application.
最后来看一下modul_app作为外壳,做了哪些事情:
外壳只有两件事情,一是定义集成模式下的manifest,而是写好集成模式下的application类,另外,在module_app的gradle中也有打包配置:
可以看到,在集成模式下app依赖所有组件,在单独开发模式下则依赖基础库.
综上,组件化开发其实并不难,只是在编译打包之前做好相关配置,在单独开发模式下,每个组件依赖自己的基础组件,使用自己定义的application和manifest.在集成模式下,每个组件依赖基础组件,module_app依赖每一个子组件,同时application和manifetst都使用module_app中定义好的.