得到、微信、美团、爱奇艺APP组件化架构实践

时间:2023-02-02 15:04:12

一、背景

随着项目逐渐扩展,业务功能越来越多,代码量越来越多,开发人员数量也越来越多。此过程中,你是否有过以下烦恼?

  • 项目模块多且复杂,编译一次要5分钟甚至10分钟?太慢不能忍?
  • 改了一行代码 或只调了一点UI,就要run整个项目,再忍受一次10分钟?
  • 合代码经常发生冲突?很烦?
  • 被人偷偷改了自己模块的代码?很不爽?
  • 做一个需求,发现还要去改动很多别人模块的代码?
  • 别的模块已实现的类似功能,自己要用只能去复制一份代码再改改?
  • “这个不是我负责的,我不管”,代码责任范围不明确?
  • 只做了一个模块的功能,但改动点很多,所以要完整回归测试?
  • 做了个需求,但不知不觉导致其他模块出现bug?

如果有这些烦恼,说明你的项目需要进行 组件化 了。

二、组件化介绍 — 优势及架构

组件化去除模块间的耦合,使得每个业务模块可以独立当做App存在,对于其他模块没有直接的依赖关系。 此时业务模块就成为了业务组件

而除了业务组件,还有抽离出来的业务基础组件,是提供给业务组件使用,但不是独立的业务,例如分享组件、广告组件;还有基础组件,即单独的基础功能,与业务无关,例如 图片加载、网络请求等。这些后面会详细说明。

组件化带来的好处 就显而易见了:

  1. 加快编译速度:每个业务功能都是一个单独的工程,可独立编译运行,拆分后代码量较少,编译自然变快。
  2. 提高协作效率:解耦 使得组件之间 彼此互不打扰,组件内部代码相关性极高。 团队中每个人有自己的责任组件,不会影响其他组件;降低团队成员熟悉项目的成本,只需熟悉责任组件即可;对测试来说,只需重点测试改动的组件,而不是全盘回归测试。
  3. 功能重用:组件 类似我们引用的第三方库,只需维护好每个组件,一建引用集成即可。业务组件可上可下,灵活多变;而基础组件,为新业务随时集成提供了基础,减少重复开发和维护工作量。

下图是我们期望的组件化架构

得到、微信、美团、爱奇艺APP组件化架构实践

  1. 组件依赖关系是上层依赖下层,修改频率是上层高于下层。
  2. 基础组件是通用基础能力,修改频率极低,作为SDK可共公司所有项目集成使用。
  3. common组件,作为支撑业务组件、业务基础组件的基础(BaseActivity/BaseFragment等基础能力),同时依赖所有的基础组件,提供多数业务组件需要的基本功能,并且统一了基础组件的版本号。所以 业务组件、业务基础组件 所需的基础能力只需要依赖common组件即可获得。
  4. 业务组件业务基础组件,都依赖common组件。但业务组件之间不存在依赖关系,业务基础组件之间不存在依赖关系。而 业务组件 是依赖所需的业务基础组件的,例如几乎所有业务组件都会依赖广告组件 来展示Banner广告、弹窗广告等。
  5. 最上层则是主工程,即所谓的“壳工程”,主要是集成所有的业务组件、提供Application唯一实现、gradle、manifest配置,整合成完备的App。

三、组件化开发的问题点

我们了解了组件化的概念、优点及架构特点,那么要想实施组件化,首先要搞清楚 要解决问题点有哪些?

核心问题是 业务组件去耦合。那么存在哪些耦合的情况呢?前面有提到过,页面跳转、方法调用、事件通知。 而基础组件、业务基础组件,不存在耦合的问题,所以只需要抽离封装成库即可。 所以针对业务组件有以下问题:

  1. 业务组件,如何实现单独运行调试?
  2. 业务组件间 没有依赖,如何实现页面的跳转?
  3. 业务组件间 没有依赖,如何实现组件间通信/方法调用?
  4. 业务组件间 没有依赖,如何获取fragment实例?
  5. 业务组件不能反向依赖壳工程,如何获取Application实例、如何获取Application onCreate()回调(用于任务初始化)?

最近小编有幸在字节跳动高工手里扒到这份“组件化实战学习手册”,这位大佬主导开发过多个采用组件化架构的APP项目。现在我只想吹爆!这位大佬熬夜半个月,把积累的经验和踩的坑都进行了总结,整理成了长达220页的学习手册,手册中收录了大厂热门的组件化项目实战,从新手到架构师,这份学习手册足以。

得到、微信、美团、爱奇艺APP组件化架构实践

第一章 Android组件化初识

  • 组件化和模块化的区别
  • 组件化和插件化的区别
  • 组件化开发的优势
  • 业务逻辑层
  • 组件化开发要遇到的问题
  • 从组件化实战来解决问题
  • Android组件化基础

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

第二章 Android组件化初探目录

  • 组件化演示案例

    概述

    模块化和组件化

    组件化Demo

    组件application和library动态切换

    ……
  • WanAndroid APP 组件化项目实战附demo

    版本更新

    效果图

    主要功能

    项目目录结构

    主要开源框架

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

第三章 架构演化(大厂篇)

  • 从智行 Android 项目看组件化架构实践

    组件化调整的原因和目标

    组件化架构调整的整体规划

    组件化架构调整中遇到的一些问题

得到、微信、美团、爱奇艺APP组件化架构实践

  • 得到 App

    Android彻底组件化demo发布

    JIMU使用指南

    组件化拆分的感悟

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

  • 微信 App

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

    微信Android架构历史

    为何再次重构微信

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

  • 蘑菇街 App

    蘑菇街 App 的组件化实现方式

    组件生命周期管理

    壳工程

    遇到的问题

    持续集成

    周边设施

    ……

    得到、微信、美团、爱奇艺APP组件化架构实践

  • 爱奇艺 App

    基于Service的IPC通信

    组件化跨进程通信的核心诉求

    Andromeda

    架构分析

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

  • 美团 App

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

    美团外卖容器化架构全景图

    外卖跨端容器建设

    外卖页面容器建设

    外卖容器化架构的衡量指标

    外卖容器化架构的监控运维

    外卖容器化架构的发布能力

    ……

得到、微信、美团、爱奇艺APP组件化架构实践

  • 美团Android组件化方案及组件消息总线modular-event实战
  • 美团Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
  • WMRouter:美团外卖Android开源路由框架
  • 美团猫眼android模块化实战-可能是最详细的模块化实战

得到、微信、美团、爱奇艺APP组件化架构实践

  • 携程App
  • 支付宝 App

    ......

以上就是字节跳动大佬熬夜整理的220页Android组件化实战学习手册,有需要的朋友直接点击此处的蓝色字体获取完整文档。

结语

现在组件化真的不是什么新鲜东西了,大公司都用的滚瓜烂熟,龙飞凤舞了,也就是现在部分中型项目和小项目在组件化的路上努力。

所以同志们,组件化没玩过的,不熟悉的赶紧搞起来,说一点,你不会组件化,发布影子工程那么对你来说就是个噩梦。从本质上来讲任何技术进步都是在现实需求的逼迫下抓耳挠腮,耗尽无数头发才想出来的。

所以呢组件化这个东西出来这么久了,页发展了这么久了,用的人越来越多,那肯定是对我们开发大有裨益的,小伙伴们不会,不熟悉抓紧啦,要不面试问你你怎么回答呢!