一、背景

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

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

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

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

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

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

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

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

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

  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页的学习手册,手册中收录了大厂热门的组件化项目实战,从新手到架构师,这份学习手册足以。

第一章 Android组件化初识

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

第二章 Android组件化初探目录

  • 组件化演示案例
    概述
    模块化和组件化
    组件化Demo
    组件application和library动态切换
    ……
  • WanAndroid APP 组件化项目实战附demo
    版本更新
    效果图
    主要功能
    项目目录结构
    主要开源框架
    ……

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

  • 从智行 Android 项目看组件化架构实践
    组件化调整的原因和目标
    组件化架构调整的整体规划
    组件化架构调整中遇到的一些问题

  • 得到 App
    Android彻底组件化demo发布
    JIMU使用指南
    组件化拆分的感悟
    ……

  • 微信 App
    微信Android模块化架构重构实践
    微信Android架构历史
    为何再次重构微信
    ……

  • 蘑菇街 App
    蘑菇街 App 的组件化实现方式
    组件生命周期管理
    壳工程
    遇到的问题
    持续集成
    周边设施
    ……

  • 爱奇艺 App
    基于Service的IPC通信
    组件化跨进程通信的核心诉求
    Andromeda
    架构分析
    ……

  • 美团 App
    外卖客户端容器化架构的演进
    美团外卖容器化架构全景图
    外卖跨端容器建设
    外卖页面容器建设
    外卖容器化架构的衡量指标
    外卖容器化架构的监控运维
    外卖容器化架构的发布能力
    ……

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

  • 携程App
  • 支付宝 App

由于篇幅限制,这里只能展示部分内容,朋友们如果需要这份完整版的PDF资料合集,微信扫描下方CSDN官方二维码【免费获取】。

结语

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

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

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

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

  1. 效能篇 | 爱奇艺APP一键体检技术实践

    背景 AndroidAPP自动化测试目前包括很多测试专项,每一个专项都有很多创新内容,包括功能自动化测试.稳定性自动化测试以及性能自动化测试等,在日常的测试过程中以上的测试技术或者服务均会发现一些问题 ...

  2. 爱奇艺号微前端架构实践

    前言 近来,微前端的概念非常火爆,那么什么是微前端架构?微前端架构是一种架构风格类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应 ...

  3. 爱奇艺APP的自动化录制回放系统 全云化处理新体验

    在面对大量的APP功能用例回归测试的时候,测试开发工程师最头痛的问题之一便是新功能交付时间紧迫,原有功能回归测试耗时长,自动化脚本都没时间跟进补齐测试用例.导致核心功能回归遗漏,新功能测试质量也得不到 ...

  4. Android篇 | 爱奇艺App启动优化实践分享

    导读 性能优化一直都是各个APP推进中的重点.难点,爱奇艺 App也不例外.在此之前,爱奇艺App Android 版的启动速度虽然一直处于同类App领先的水平,但优势距离其他同类的APP距离一直很小 ...

  5. 腾讯技术团队人手一份的Android组件化实战笔记(含得到、微信、美团、爱奇艺APP架构项目及源码)

    前言 以前的Android开发大多用的中心化管理思想,将相同的资源集中进行管理.随着项目的发展,弊端渐显:集中管理的资源越来越多,多人开发也越来越麻烦,时常牵一发而动全身. 尤其是在大公司或者是大项目 ...

  6. 互联网晚报 | 1/12 星期四 | 微信回应切断抖音外链;爱奇艺App限制投屏;iPhone 16 Pro或取消灵动岛摄像头...

    微信回应切断抖音外链:坚决打击给用户造成诱导.骚扰的外链  1月10日晚间,第一财经独家报道抖音链接目前在微信内既无法直接打开.也无法复制完成跳转,甚至要通过图片OCR识别进行文字提取的情况.但微信内 ...

  7. 爱奇艺 App 中台技术实践

    本文来自爱奇艺研究员在 ArchSummit 全球架构师峰会上的演讲整理,将为大家分享爱奇艺打造移动中台的过程.爱奇艺移动中台的建设过程可分为组件解耦.组件定制化和平台化,未来会利用平台发现.沉淀和复 ...

  8. 没有投屏标志怎么投屏_爱奇艺App没有“TV”图标怎么投屏电视

    原标题:爱奇艺App没有"TV"图标怎么投屏电视 爱奇艺App没有"TV"图标怎么投屏电视 其实大家都知道现在的好多APP软件都是可以无线投屏的,比如爱奇艺,腾 ...

  9. 爱奇艺APP全面适配iOS 14 首批支持画中画功能 追剧聊天两不误

    导  语 为了让iOS 14的用户娱乐体验有更加舒适.便捷,爱奇艺APP全面适配iOS 14,不仅是首批支持iOS 14一屏多任务画中画功能的平台,同时支持Widget小组件实现桌面个性化推荐一键点击 ...

最新文章

  1. PXE自动化安装系统
  2. 用IIS建立的.net网站通过IP地址不能访问解决方法
  3. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
  4. 线性代数行列式计算之迭代法
  5. leetcode 686. Repeated String Match | 686. 重复叠加字符串匹配(KMP)
  6. php --魔术常量 /魔术方法
  7. 算法设计中的基础常用代码
  8. 笔记本电脑怎么清理灰尘_笔记本发热怎么办?这里有解决方案
  9. mysql 清理 reley_MySQL日志相关
  10. 信息学奥赛一本通 1146:判断字符串是否为回文 | OpenJudge NOI 1.7 33:判断字符串是否为回文
  11. win10怎么设置默认浏览器_vscode如何设置默认打开的浏览器为Chrome?
  12. 数据操作类:增删改查
  13. 怎么用EasyRecovery恢复sd卡中的数据
  14. python for 循环中使用星号(*),实现分组展开列表
  15. 极光im php,利用php+curl调用极光IM第三方REST API方法经验
  16. 微星主板Ubuntu16.04安装教程
  17. python代码案例详解-Python代码样例列表
  18. 数据库实验1---创建数据库和表
  19. web浏览器下载文件没响应不报错
  20. 干货 | 携程机票Sketch插件开发实践

热门文章

  1. java list分批
  2. 法语初级学习笔记-03-疑问句
  3. 机器学习——感知机学习算法
  4. Vue Router参数大全
  5. ffmpeg源码优化之推流发送篇
  6. Halcon——Sobel_amp算子
  7. 华为手机使用profile闪退问题
  8. 硬肝4.4w字为你写成Java开发手册
  9. Eclipse安装字体样式风格包
  10. 微信小程序开发,如何添加多个空格