组件化研究一(含完整配置步骤及完整代码)
组件化开发适合多人大团队协同作战。
首先我们要明确组件化要实现的效果是什么样的,如图1,MainApp作为一个单独的app,要通过Base Library,与ModuleA、ModuleB等通讯,
ModuleA 、ModuleB既能够单独运行,又能被Main App依赖。
![](https://img.haomeiwen.com/i3587320/b9c0b1126b912c6e.png)
第一步创建module:因为单独的Module可以独立运行,所以一定选如图3所示的这个来创建
![](https://img.haomeiwen.com/i3587320/93f1adfb1a5432c8.png)
![](https://img.haomeiwen.com/i3587320/48ca704ace2c779f.png)
![](https://img.haomeiwen.com/i3587320/b861833bf87d5df6.png)
![](https://img.haomeiwen.com/i3587320/03f0202d5ec1c565.png)
第二步下面再创建Base library:
![](https://img.haomeiwen.com/i3587320/f82e7ec08ae4baf6.png)
第三步将Module和Library中build.gradle 中的关于sdk的统一配置一下:
![](https://img.haomeiwen.com/i3587320/298839ddffa21979.png)
第四步,动态的决定那个module是个application还是library,其中loginRunAlone是在gradle.properties里配置的。BaseLibrary不用配置了,因为他确定了就是一个library
![](https://img.haomeiwen.com/i3587320/cd0e315b8598e77f.png)
因为是application的时候才会有applicationId,所以对applicationId也会有同样的判断
![](https://img.haomeiwen.com/i3587320/5ae77c911aca8b47.png)
第五步配置module的依赖与引用
![](https://img.haomeiwen.com/i3587320/50085575df34e63c.png)
添加主app依赖后,会报错
![](https://img.haomeiwen.com/i3587320/a151562dc2adb960.png)
是因为,我们添加了依赖,会在build.gradle中自动添加
![](https://img.haomeiwen.com/i3587320/628c6b8c91a45c13.png)
当module1是个apk的时候,是不能添加引用的,所以添加如下判断
![](https://img.haomeiwen.com/i3587320/7b7023bbfc73790c.png)
第六补 配置manifest(因为当module运行时候,与是library时候里面不一样)
![](https://img.haomeiwen.com/i3587320/630380142dc0ead7.png)
![](https://img.haomeiwen.com/i3587320/5e93010f8080867f.png)
第七步、图16是我所写的demo的实现:在MainApp中,点击“跳转到组件A”展示module1中某个activity;点击“跳转到组件B”展示module2中某个activity,点击第三个按钮,将module1中的页面展示出来
![](https://img.haomeiwen.com/i3587320/8435f48bbc2691a2.png)
图17中是demo的结构
![](https://img.haomeiwen.com/i3587320/88de2030bd7c19b9.png)
其中图18中的moduleA与moduleB的true或是false,控制着组件模式与集成模式的切换
![](https://img.haomeiwen.com/i3587320/246aad37f7fdccf1.png)
完整demo见本人github地址:https://github.com/wintersweett/App