8

企业级 Android 模块化平台设计建议 - 小专栏

 3 years ago
source link: https://xiaozhuanlan.com/topic/2735849061
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
企业级 Android 模块化平台设计建议 - 小专栏
企业级 Android 模块化平台设计建议
预计阅读时间4分钟 2 年前

这篇文章是应对各个公司所谓的:架构组,基础组,移动横向组,这样的部门在开发与日常工作时提升效率的一些建议(这些问题都是在我本人曾经的工作中遇到的),同时也适用于模块化开发的场景。

本文将以模块化开发的场景作为切入点(基础架构组请将每个组件理解为一个独立模块) 首先,模块化开发这个普通的技术点我不打算再讲了,而且随着移动端技术越来越成熟,也没必要再去讲一些过时的东西了。
如果你还不懂什么是模块化开发,可以查看我2016年写的博客:《Android业务组件化开发实践https://kymjs.com/code/2016/10/18/01/

首先,这是一篇有门槛的文章,如果你们是只有两三个人的团队,那建议还是别折腾了,太浪费时间。如果是比较大的团队而且项目模块化已经完成了的,那还是可以考虑一下的,毕竟可以节省出来不少模块间联调与跨模块沟通的时间。

模块间联调

事实上我们的模块独立性已经做的非常好了,可以做到每个模块的增删,代码零改动,一行都不需要改。原理请见这篇文章:《优雅移除模块间耦合https://xiaozhuanlan.com/topic/9843071526
但不可避免的,还是有三四个强业务模块,必须依赖全局Service才能工作的。
还有就是某些模块虽然不依赖外部模块,但需要一些全局信息,例如id用户名这种。但是如果使用mock数据,又会增大工作量,开发不愿意做。
解决办法其实很简单,Android Studio是支持工程compile module的。如何做?来看张图:

23445736bb98363a717330df4b9be28f.png

setting.gradle文件中,可以指定一个project位置,这里就可以将一个外部工程中的模块导入到APP工程中了。

顺带一提,也有另一种实现方案是直接将工程中的module单独作为一个git仓库,然后在外层(工程级)仓库的.gitignore中配置忽略掉module。这样在本地看来就是一个工程级仓库中包含了多个module仓库。这种方式也可以达到目的,但我个人不推荐使用这种方式。

让模块引用与aar引用互斥

解决了前一个问题,在模块联调与源码修改的时候是非常方便了的。但是实际开发中,如果你直接这么做,一定会碰到有类冲突的情况。
举一个例子:
base模块是每个模块都会依赖的,此刻base被打为了一个aar包,在使用的时候直接compile
login模块依赖了base模块。
此时如果我想调试base模块,用上面的方法把base的源码导入,就会发生,项目中不仅依赖了base的源码,同时还引入了baseaar,就会造成类冲突。

Created with Sketch.
剩余50%的内容订阅专栏后可查看
Created with Sketch.
小专栏是一个专业人士的创作知识社区,在这里您可以看到各个领域最专业的专栏和观点。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK