关于Android模块化我有一些话不知当讲欠妥讲
比来公司一个项目应用了模块化设计,本人介入个中的一个小模块开辟,然则整体的设计并不是我架构设计的,开辟半年有余,在此记录下来我的设法主意。
为什么须要模块化?
本来的一份代码,如今须要多小我来保护,每小我的代码质量也不雷同,在进行代码Review的时刻,也是比较艰苦的,同时也轻易会产生代码冲突的问题。
gradle依附如下。
同时跟着营业的增多,代码变的越来越复杂,每个模块之间的代码耦合变得越来越严重,解耦问题急需解决,同时编译时光也会越来越长。
人员增多,每个营业的组件各自实现一套,导致同一个App的UI风格不一样,技巧实现也不一样,团队技巧无法获得沉淀。
架构演变

跟着营业的增多,我们添加了Domain的概念,Domain大年夜Data中获取数据,Data可能会是Net,File,Cache各类IO等,然后项目架构变成了如许。

再然后跟着人员增多,各类基本组件也变的越来越多,营业也很复杂,营业与营业之间还有很强的耦合,就变成了如许的。

应用模块化技巧今后,架构变成了如许。
技巧要点
这里简单介绍下Android项目实现模块化须要应用的技巧以及技巧可贵。
Library module
在开端开端进行模块化之前,须要把各个营业零丁采取成Android Library Module,这个是Android Studio自带一个功能,可以把依附较少的,作为根本组件的采取成一个零丁模块。
如图所示,我把各个模块零丁分为一个自力的项目。

在主项目中应用gradle添加代码依附。
- // common
- compile project(':ModuleBase')
- compile project(':ModuleComponent')
- compile project(':ModuleService')
- // biz
- compile project(':ModuleUser')
- compile project(':ModuleOrder')
- compile project(':ModuleShopping')
在把代码采取到各个零丁的Library Module中,会碰到各类问题。最常见的就是R文件问题,Android开辟中,各个资本文件都是放在res目次中,在编译过程中,会生成R.java文件。R文件中包含有各个资本文件对应的id,这个id是静态常量,然则在Library Module中,这个id不是静态常量,那么在开辟时刻就要避开如许的问题。
举个常见的例子,同一个办法处理多个view的点击事宜,有时刻会应用switch(view.getId())如许的方法,然后用case R.id.btnLogin如许进行断定,这时刻就会出现问题,因为id不是经经常量,那么这种方法就用不了。
同样开辟时刻,用的最多的一个第三方库就是ButterKnife,ButterKnife也是弗成以用的,在应用ButterKnife的时刻,须要用到注解设备一个id来找到对应view,或者绑定对应的各类事宜处理,然则注解中的各个字段的赋值也是须要静态常量,那么就不克不及够应用ButterKnife了。
EventBus
3.设置项目支撑Databinding,然后应用Binding中的对象,然则会增长不少办法数,同时Databinding也会有编译问题和进修成本,然则这些也是小问题,小我觉的问题不大年夜。
解决筹划有下面几种:
1.从新一?Gradle插件,生成一个R2.java文件,这个文件中各个id都是静态常量,如许就可以正常应用了。
2.应用Android体系供给的最原始的方法,直接用findViewById以及setOnClickListener方法。
膳绫擎是主流的解决办法,小我推荐的应用优先级为 3 > 2 > 1。
当把个模块分开今后,每小我就可以零丁分组对应的模块就行了,不过会有资本冲突问题,小我建议是对各个模块的资本名字添加前缀,比如user模块中的登录界面构造为activity_login.xml,那么可以写成如许us_activity_login.xml。如许就可以避免资本冲突问题。同时Gradle也供给的一个字段resourcePrefix,确保各个资本名字精确,具体用法可以参考官方文档。
依附治理
当完成了Library module后,代码根本上已经很清楚了,跟我们膳绫擎的最终架构已经很类似了,有了最根本的骨架,然则照样没有完成,因为照样多小我操作同一个git仓库,各个开辟小伙伴照样须要对同一个仓库进行各类fork和pr。
跟着对代码的瓜分,然则主项目app的依附变多了,如不雅修改了lib中的代码,那么编译时光是很恐怖的,大年夜概统计了一下,本来在同一个模块的时刻,编译时光大年夜概须要2-3min,然则分开今后大年夜概须要5-6min,这个是绝对无法忍耐的。
推荐阅读
云安然到底是什么?是传统厂商的盒子的iso化?是云厂商自身具备的安然才能?照样SaaS供给安然办事?这些不雅点都比较单方面,作为聊天话题还可以,但落地还须要卖力评论辩论。一、云安然标>>>详细阅读
本文标题:总结Android模块化的一些知识点。
地址:http://www.17bianji.com/lsqh/36020.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示