作家
登录

总结Android模块化的一些知识点。

作者: 来源: 2017-07-04 15:46:20 阅读 我要评论

关于Android模块化我有一些话不知当讲欠妥讲

比来公司一个项目应用了模块化设计,本人介入个中的一个小模块开辟,然则整体的设计并不是我架构设计的,开辟半年有余,在此记录下来我的设法主意。

为什么须要模块化?

本来的一份代码,如今须要多小我来保护,每小我的代码质量也不雷同,在进行代码Review的时刻,也是比较艰苦的,同时也轻易会产生代码冲突的问题。

gradle依附如下。

同时跟着营业的增多,代码变的越来越复杂,每个模块之间的代码耦合变得越来越严重,解耦问题急需解决,同时编译时光也会越来越长。

人员增多,每个营业的组件各自实现一套,导致同一个App的UI风格不一样,技巧实现也不一样,团队技巧无法获得沉淀。

架构演变

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

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

应用模块化技巧今后,架构变成了如许。

技巧要点

这里简单介绍下Android项目实现模块化须要应用的技巧以及技巧可贵。

Library module

在开端开端进行模块化之前,须要把各个营业零丁采取成Android Library Module,这个是Android Studio自带一个功能,可以把依附较少的,作为根本组件的采取成一个零丁模块。

如图所示,我把各个模块零丁分为一个自力的项目。

在主项目中应用gradle添加代码依附。

  1. // common 
  2. compile project(':ModuleBase'
  3. compile project(':ModuleComponent'
  4. compile project(':ModuleService'
  5.  
  6. // biz 
  7. compile project(':ModuleUser'
  8. compile project(':ModuleOrder'
  9. 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,这个是绝对无法忍耐的。

 1/4    1 2 3 4 下一页 尾页

  推荐阅读

  深入分析一波,你们说的云安全到底是什么鬼?

云安然到底是什么?是传统厂商的盒子的iso化?是云厂商自身具备的安然才能?照样SaaS供给安然办事?这些不雅点都比较单方面,作为聊天话题还可以,但落地还须要卖力评论辩论。一、云安然标>>>详细阅读


本文标题:总结Android模块化的一些知识点。

地址:http://www.17bianji.com/lsqh/36020.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)