17

汇总分享下十几家大厂的组件化方案

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ%3D%3D&%3Bmid=2650834511&%3Bidx=1&%3Bsn=5c4a36784ee23d50b5eb92d91c1a1344
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.

本文作者

作者: 彭丑丑

链接:

https://juejin.cn/post/6896099703474749453

本文由作者授权发布。

稳住,今天是周末,汇总一波链接,有兴趣可以周末在家查看。

1

前言
  • 组件化是 保持整个 App 可持续地进行高质量开发的基础,近年来也是业界一直在积极探索和实践的方向,在深入理解组件化架构的过程中,将不断考验你的技术深度与广度;

  • 实践中我还参考了十几家技术团队的解决方案(例如:美团、有赞、阿里等等),在这个系列里,我将总结我对于组件化的思考和实践。

2

大厂解决方案参考

1 有赞微商城 IOS 端

  • 指出了业务模块化的基本演进:“混乱” -> “中介者模式”->“去中心化”

  • 梳理了模块间通信需求:UI 页面跳转、动作执行及复杂数据传输、一对多的通知广播;

  • 分享了“复杂数据传输”的处理办法:“复制粘贴代码” -> “下沉到common”

qaANRfz.png!mobile

2. 有赞微商城 Android 端

  • 提出了 5 个调整方向:抽象基础模块、公共服务去中心化、业务模块服务化、抽象基础组件、单/多模块打包

  • 介绍了基于 3 个基础组件依赖和 1 个 Gradle 插件的落地方案

ZzUNv2z.png!mobile

《有赞移动应用如何给页面安上“任意门”》 

https://tech.youzan.com/you-zan-yi-dong-duan-dong-tai-lu-you-zu-jian-shi-xian-fang-an/

《有赞微商城-Android组件化方案》

https://tech.youzan.com/you-zan-yi-dong-androidzu-jian-hua-fang-an/

《有赞移动 iOS 组件化(模块化)架构设计实践》 

https://tech.youzan.com/you-zan-ioszu-jian-hua-jia-gou-she-ji-shi-jian/

3. 蘑菇街 App

  • 提到了组件间通信的实现:URL 统跳、协议下沉(需要有一个公共的地方来容纳这些 public protocl)、隐式 Intent

  • 提到了组件生命周期管理:监听系统通知、ModuleManager 中手动遍历调用

  • 提到了组件版本管理与持续集成经验

iMRrYbM.png!mobile

VFRfmy3.png!mobile

《蘑菇街 App 的组件化之路》

https://www.jianshu.com/p/cdf94a963c27

《蘑菇街 App 的组件化之路·续》 

https://blog.csdn.net/daiyelang/article/details/51648004

4. 得到 App

  • 提到了组件生命周期、服务注册的实现

  • 提到了公共层定义组件服务、base层定义通用资源

  • 提到了 implementation 与 runtimeOnly 的代码 / 资源隔离效果;

  • 提到了 JIMU 插件的调试切换、智能配置功能;

  • 提到了 2 种调用组件声明周期的方法:javassist 和反射;

  • 提到了有序初始化组件的解决方案:StartUp、DAU

qu6FBfi.jpg!mobile

《Android彻底组件化demo发布》

https://www.jianshu.com/p/59822a7b2fad

《Android彻底组件化—代码和资源隔离》

https://www.jianshu.com/p/c7459b59dcd5

《组件化:代码隔离也难不倒组件的按序初始化》

https://juejin.cn/post/6884492604370026503/

《浅谈Android组件化》

5. 携程 App

  • 提到了使用数据总线或者 URL 总线实现页面和功能跳转

  • 提到了定制 Gradle 插件来定制化打包

qyuy6jv.png!mobile

《携程移动App架构优化之旅》  

6. 支付宝 App

  • 介绍了基于 Bundle 和 mPaaS 打包插件的 Quinox 客户端框架,用于解决模块化和动态化两大问题;

  • 提到了解决资源 id 重复的解法:改造 aapt,为每个 Bundle 指定不同 packageId;

NRvm6rA.png!mobile

《你知道支付宝容器化架构是怎么搭建的吗?》 

https://juejin.cn/post/6844903874491318286

7. 手淘 App

  • 提到了手淘 All In (聚划算、天猫)方案的隐患:性能、复用、稳定;

  • 提到了容器框架 Atlas 的工作原理;

NzyyyiE.jpg!mobile

6jYbaiN.jpg!mobile

《Atlas-手淘组件化框架的前世今生和未来的路》

https://blog.csdn.net/taobaojishu/article/details/99830031

8. 爱奇艺 App

  • 提到了使用 Service 进行跨进程组件通信的缺点;

  • 介绍了组件化跨进程通信框架 Andromeda 的功能与核心原理;

《Android组件化跨进程通信框架Andromeda解析》

https://juejin.cn/post/6844904034227224589

9. 微信 App

  • 提到了微信架构演进:简单分层架构 -> 多进程架构 -> 多子工程并行开发架构;

  • 提到了基础工程存在中心化的问题:越来越多的代码/事件很“自然的”被下沉到基础工程;

  • 提出了重塑模块化的 3 个目标:改变通信方式、重新设计模块、约束代码边界

  • 提出了服务注册的通信方式

  • 提出了新颖的接口暴露方法:将文件后缀修改为.api(需配合include_with_api 命令)

  • 设计了模块生命周期:dependency()、configure()、execute()

  • 设计了 pins 工程结构,用于约束代码边界

  • 提出了组件化的考量问题:动态性、隔离性

3MjAVrB.png!mobile

《微信Android模块化架构重构实践》

10. 美团 App

  • 设计了组件消息总线 modular-event

  • 设计了组件化路由框架 WMRouter

《外卖客户端容器化架构的演进》 

https://tech.meituan.com/2020/09/30/waimai-mobile-architecture-evolution.html

《Android组件化方案及组件消息总线modular-event实战》 

https://tech.meituan.com/2018/12/20/modular-event.html

《Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus》 

https://tech.meituan.com/2018/07/26/android-livedatabus.html

《WMRouter:美团外卖Android开源路由框架》 

https://tech.meituan.com/2018/08/23/meituan-waimai-android-open-source-routing-framework.html

《美团猫眼android模块化实战-可能是最详细的模块化实战》 

https://blog.csdn.net/qq_22744433/article/details/77948442

最后推荐一下我做的网站,玩Android:  wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!

前几篇

Handler 10问,你顶的住吗?

带着问题学LiveData,你应该知道的知识点

没见过这么详细的,自定义控件图形探索!

vEVjqa7.jpg!mobile

扫一扫  关注我的公众号

如果你想要跟大家分享你的文章,欢迎投稿~

┏(^0^)┛明天见!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK