android studio 搭建组件化项目框架

由于之前项目的冗余功能和代码增多,让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。希望这篇文章能够解决你的问题。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用android studio 运行,下面是一个简单的文档,这个代码是一个demo 一、Activity的使用 1、SNActivity 框架最基本的activity,可调用$(SNManager)进行操作activity,具体用法请参考文档或代码 2、SNNavigationSlidingActivity 包含SNActivity的功能,继承于com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity 支持导航条和左滑视图的Activity 加载导航条: loadNavBar(int height,int background_color_id) loadNavBarResId(int height_id,int background_id) 加载左侧视图: /** * load left view * @param left_id left layout id * @param offset_value offset value * @param shadow_width_value shadow width value * @param shadow_drawable_id shadow drawable style * @param fade fade value */ loadLeft(int left_id, int offset_value, int shadow_width_value, int shadow_drawable_id, float fade) /** * load left view * @param left_id left layout id * @param offset_id offset id * @param shadow_width_id shadow width id * @param shadow_drawable_id shadow drawable id * @param fade fade value */ loadLeftResId(int left_id, int offset_id, int shadow_width_id, int shadow_drawable_id, float fade) 二、SNElement的使用 View的伪装对象,支持所有View的功能,详细功能可参考文档或代码 手动伪装:$.create $.id $.findView 注入伪装:$.setContent(view class or layout id,inject class); 获取原型:elem.toView(); 三、注入 1、视图注入 A、创建注入类,属性名称必须和layout中的id对应,如果不对应请加入标签@SNInjectView class DemoInject{ @SNInjectView(id=R.id.tvTest) public SNElement test; } B、实例注入对象 DemoInject di=new DemoInject(); C、调用$.inject或者$.setContent注入 $.inject(di); D、注入成功后即可调用对象 String text=di.test.text(); 2、依赖注入 A、需要绑定注入对象,建议写到Application中的onCreate SNBindInjectManager.instance().bind(ITest.class, Test.class); B、与视图注入不同的是属性必须添加标签@SNIOC,注入的对象(Test)必须包含只有一个SNManager参数的构造函数,且必须实现注入者 public class Test implements ITest{ SNManager $; public Test(SNManager _$){ this.$=_$; }; } class DemoInject{ @SNIOC public ITest test; } C、调用$.inject或者$.setContent注入 同视图注入 D、注入成功后即可调用对象 di.test.xxx(); 四、fragment的使用 1、SNFragment 2、SNLazyFragment 五、控件的使用 1、SNFragmentScrollable 2、SNPercentLinearLayout、SNPercentRelativeLayout 3、SNScrollable 4、SNSlipNavigation 5、XList 6、slidingtab

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值