- 为什么要组件化?
组件化是为了将不同的模块分开开发,解除不同模块间的耦合关系。同时单独组件可以独立运行,方便团队按模块分配任务。
在开发过程中,独立组件由于代码量少,编译速度快,提升开发效率
2:如何组件化
再说这个问题前我们需要了解下一个完整组件化后的项目框架
层次:大致可以分为:基础依赖库层 基础代码库层 功能组件层
基础依赖库层:存放jar包和底层依赖 比如okhttp.jar glide.jar 等等jar包
基础代码:基于依赖库层进行的代码封装,提供app基础能力
功能组件层:包含不同的组件这块根据业务对app进行划分
了解完层次后,我们可以对自己的app进行拆分,主要目的是将我们的app分成几份依赖库形式的代码,使每一个模块都变成一个可以被依赖的依赖库。然后,针对单独模块创建一个壳工程,依赖对应的模块,从而实现该模块的单独运行。
拆分过程难点:
当然了拆分过程中会遇到很多问题,因为我们要将原始是一个appliciation的app拆分成多个library的库,那么作为库点击事件的switch(常量) 自然要改写成if()else{},原来如果用了butterknife的最好也换成findviewbyid,不同模块的资源名称最好有自己的前缀不然很容易在合并的时候造成资源调用冲突,这些都可以通过一定的工作量解决
公共库的处理:
公共库属于基础代码库层:该库中应该包含app中一些通用的工具和路由代码,用来实现为不同的组件提供服务和沟通不同组件的重要作用,同时该库中应该包含一个集成Appliciation的类为app提供上下文,一个app只能有一个上下文,所以组件上的appliciation应该都要继承公共库的Appliciation,该库中的AndroidManifest.xml应该包含有app所用到的权限
路由:用来实现app在不同模块之间跳转界面。由于app被拆分到不同的模块,在合并后无法直接跨模块进行模块之间的界面跳转,所以需要路由工具来提供能力。路由工具推荐阿里巴巴的Arouter具体使用可参考github
组件库的处理:
组件库是一个广泛的概念,可以是一个简单的支付组件或登录组件,也可以是一个大的业务组件,有需要组件间交互的的组件需要依赖基础代码库,以实现组件之间的交互,单独组件可以不用依赖基础代码库。组件库之间可以互相依赖但是为了不造成依赖混乱,建议不过度拆分。
组件之间的交互:
组件之间可能不仅仅是界面间的跳转,还有方法的调用等,这种情况需要通过在基础代码中实现连接接口,提供交互能力,当然github上也有不少相关的开源库,在遇到时可以自行查找
git管理:
组件化后由于有公共库,所以存在不同组件对同一份公共库进行修改的问题,公共库的同步成为了一个问题。这里我们需要了解一个git对于公共模块管理的一个工具submoduler,管理工具推荐使用sourcetree当然命令也行。
这里我们了解一下,一个app是如何通过submoduler实现代码在组件和整体app之间的同步更新,这意味着不管我们在哪个组件修改代码,都能在app壳中获取到最新的代码,同理在app壳中更新代码,也能及时的同步到不同的组件上去。
首先,我们每一个不同的组件应该都是一个library,并且被他们各自的壳所依赖 。每个组件的壳都有自己的git路径,每个子模块也有自己的git地址。这意味着不管是壳还是子模块都能有自己的版本更新记录和版本管理。壳通过添加submoduler引入子模块依赖。更新代码的时候sourcetree会自动检测子模块是否有代码更新,有的话需要更新子模块才能更新壳。同样,拉取的时候需要拉取正确版本的子模块,然后拉取壳工程。每个壳只需要 拉取自己对应的子模块和其他需要用到的小组件。整体app需要拉取所有的模块保证功能的完整。