Android工程模块化(1)

本文分享了一次工程模块化重构的实践经验,从抽象第三方库、整合基础组件到业务模块的拆分,探讨了解耦、编译效率提升及依赖管理的策略。通过解决网络框架集成、ButterKnife使用难题,为实现真正的模块化编译打下了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块化原因和目的

  基于对工程模块化的研究,模块之间的解耦重用,提升编译效率等目的,打算把模块化运用到工程当中;并不是基于人员扩充,易于开发等(这些估计后边会用到),因为业务发展的确实慢。通过对工程的模块化,自己也可以熟悉这个过程中的难点和问题,扩充自己在架构方面的知识;

重构过程

先上一个图:
在这里插入图片描述
这个是第一阶段模块化之后的模块图;

  • 第一步:先把第三方库抽象出来,自己定一个个config.gradle,然后在根build.gradle里面 在这里插入图片描述
    这样做的目的是方便管理;

  • 第二步:
      把网络,util,自定义view,activity,fragment的抽象都抽取到baseModel中;
      网络框架用的 okhttp+retrofit+rxjava,然后碰到了一个问题,就是之前http请求放到了一个httpmanager类中统一管理用到了apiInterface,apiInterface中用到了请求完成转化的类,因为时间问题(还有需求要做)还没想到好的办法,所以这两个类都暂时放到了BusinessModel中;
      在写文章的过程中突然有了想法,把这两个类放到basemodel中,然后把需要json转化成的实体bean放到base中,binggo,验证可行;

  • 第三步:业务模块的抽取
    项目是个医疗相关的app,业务逻辑主要分为医疗资讯,医生问诊,设置三大模块,还算比较清晰;

遇到的问题,解决方案

  1. 首先要了解,依赖都是单向的;比如,a模块依赖了b模块,a可以调用b模块中的类和方法,如果b想调用a的类和方法,b依赖了a,那么sync的时候回报错,在这里插入图片描述
    b如果想引用a中的方法,那么就得想办法把a中的类抽取到更低的模块中;
  2. ButterKnife的问题;
      在模块化的工程中建议不要使用,最新版本中虽然可以支持,就是引用R2,点击事件就用setOnclickListner但是我遇到了一个问题,就是在recyleview的adapter中,有多个点击事件回调的时候,我是根据R.id来判断的,但是R.id在model中不是常量。
      解决办法我想到了两个:1,每个view设置一个回调;2,回调传参的时候自定义常量,每个常量代表一个事件;
      为了以后更好的重构,我再工程中去掉了ButterKnife,Android code Generator这个插件可以把布局文件自动生成fragment和Activity,方便了不少;

后续改进的想法

  支持工程模块单独编译,这才是真的模块化;

感悟

  纸上得来终觉浅,绝知此事要躬行;自己一定要动手敲下代码,印象才算深刻;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值