由于之前项目的冗余功能和代码增多,让app的运行bug频出以及维护成本和维护难度的增加。公司领导不得不下定决心重新做一款app,把一些主要的功能从旧的app中剥离出来梳理分类,重新做一款便于维护,耦合性低的app。经过调研公司领导决定搭建组件化项目框架。
由于组件化的使用比较广泛。组件化的优点道长也就不多说了,个人认为组件化最重要的优点在于耦合性低,以后对每个模块可以单独维护而不影响其他功能。对于已经存在的功能的上线,下线,调节,比较灵活。
经过4个月的奋战,期间与产品,服务器之间的交流,讨论甚至争吵最后都有了结果。可以对比一下我们之前的项目架构与现在的项目架构:
之前的项目架构,功能模块和工具模块相互掺杂在一块,代码调用混乱
现在的项目架构,功能模块与工具模块被分类,模块之间通过路由调用
一、准备
组件化让app有了更大的功能承载力和更低的项目维护成本。也让app有了更多的可能。组件话框架的搭建需要准备一些东西。
一个稳健的服务器用来存放代码,这里道长用的是gitHub
一个简单易用的代码管理工具
我们之前使用的android studio自带的版本管理工具就非常简便易用,但是在组件化的工程中android studio自带的版本管理工具就不能很好的做代码上传,拉取,合并等操作。道长公司使用的是Sourcetree。
注意:Sourcetree对Mac电脑有很好的适配。如果你们的办公电脑是Mac的话推荐使用。如果是Windows电脑的话,使用会很苦逼的(谁用谁知道,捂脸痛哭)。有其他推荐的小伙伴可以给道长留言,先谢谢了。
二、搭建
在搭建组件化项目框架之前,首先要知道壳工程、库工程、模块工程有一个了解,然后对项目有一个规划。
壳工程,一般不存放代码,用来引用存放库工程与模块工程。
库工程,用来存放工具类、base类、自定义控件以及第三方框架作为项目中的库来使用。
模块工程,用来存放逻辑代码。
我们项目的引用关系与项目规划大致如下:
2.1 分别创建壳工程,库工程,模块工程
2.1.1创建壳工程并上传到gitHub
如果不知道如何把项目上传到gitHub可以去翻一下道长之前的博客:github:上传项目与删除项目
2.1.2创建库工程,模块工程并上传到gitHub
注意:库工程和模块工程是作为一个子模块添加到壳工程,子模块工程的目录结构与普通的工程目录结构不同。
普通的目录结构:
子模块的目录结构
子模块的目录结构可以通过在一个普通的工程中创建子模块拿到,具体方法如下:
点击Module
创建子模块
拿到子模块工程目录
子模块的创建与壳工程创建不同的是在github:上传项目与删除项目中的上传工程文件这一步,壳工程上传的是普通工程的结构目录而库模块和功能模块上传的是子模块的目录结构。
把所需要的库模块和功能模块一一创建,结果如下:
模块命名方面,一般功能模块以“module_ + 模块名”命名,库模块以“lib_ + 库名”命名。尽量做到模块名与库名单独唯一。
2.2 关联壳工程与子模块
首先把壳工程拉取一份新的,然后进入Git控制台
依次输入下列指令
git submodule add 子模块路径 子模块名字
git status
git diff
git add .
git commit -m "add submodule"
git push origin 提到的分支
git submodule add 子模块路径 子模块名字:关联子模块,把子模块路径的工程命名为子模块名字并添加到壳工程。
git status:显示工作目录和暂存区的状态,防止提交不想提交的代码。
git diff:显示提交和工作树等之间的更改。
git add .:提交所有文件。
git commit -m “add submodule”:添加提交文件的备注为”add submodule”。
git push origin 提到的分支:把提交的代码推送到远程服务器。
- 然后前往GitHub查看,如下展示便为关联正确
注意:关联子模块的子模块如果之前是一个单独运行的项目,需要对这个单独运行的项目的目录框架进行修改。负责关联上子模块在android studio 不能正常展示。
2.3 添加路由器
壳工程关联完毕子模块以后就可以作为一个项目来进行开发了,但是现在每个子模块之间不能直接调用。我们需要添加路由器来进行模块之间的跳转与数据交流。
这里道长选择的是阿里的ARouter路由框架。
一般把公用第三方框架放在lib_base中
在其他所有子模块中添加路由器并且引用lib_base模块
2.3.1 路由器的使用
路由器的使用不是这篇博客的重点,以后会有专门的一篇博客分享路由器的使用,这里只做简单介绍。在要跳转的界面添加如下代码:
然后无参跳转,代码如下:
2.4 配置项目
项目添加完成后我们还要做一些配置。
2.4.1 库模块的配置
把gradle中的apply plugin: ‘com.android.application’修改成apply plugin: ‘com.android.library’
把manifest中的代码作如下修改
2.4.2 功能模块中的配置
把gradle中的apply plugin: ‘com.android.application’做如下修改
在gradle.properties中添加如下代码
在项目中添加如下文件,用来在模块开发时能够单独打包
三、Sourcetree使用
最后道长不得不吐槽一下Sourcetree对Windows用户的不友好了,
这个就是Sourcetree的拉取界面,用户只要把代码库的路径贴在第一行就可以了,当然如果不满意可以修改第二行与第三行。
注意使用Sourcetree 拉取代码需要使用帐号登录,使用帐号登录,使用帐号登录,这个帐号不是git帐号,而是需要单独注册的bitbucket的账户
而且使用Sourcetree合并代码和解决冲突十分棘手,Windows平台并不能添加第三方合并软件,例如Beyond Compare 4。如果有小伙伴有简便易用的代码管理工具一定要告诉一下道长。
到这里道长大概已经分享完了,有一些细节可能没有说道,小伙伴们可以去我的gitHub围观一下。传送门在此:GitModuleDemo。希望这篇文章能够解决你的问题。