##先说组件化:
组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。每个大厂内部的各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产出。本文主要介绍我们的组件化方案,希望对从事Android组件化开发的同学能有所启发。
近年来,为什么这么多团队要进行组件化实践呢?组件化究竟能给我们的工程、代码带来什么好处?我们认为组件化能够带来两个最大的好处:
1.提高组件复用性
可能有些人会觉得,提高复用性很简单,直接把需要复用的代码做成Android Module,打包AAR并上传代码仓库,那么这部分功能就能被方便地引入和使用。但是我们觉得仅仅这样是不够的,上传仓库的AAR库是否方便被复用,需要组件化的规则来约束,这样才能提高复用的便捷性。
2.降低组件间的耦合
我们需要通过组件化的规则把代码拆分成不同的模块,模块要做到高内聚、低耦合。模块间也不能直接调用,这需要组件化通信框架的支持。降低了组件间的耦合性可以带来两点直接的好处:第一,代码更便于维护;第二,降低了模块的Bug率。
要实现组件化需要考虑的问题主要包括下面几个:
代码解耦。将一个庞大的工程拆分解耦,这是非常耗时耗力的工作,但这也是最基础最重要的一步
数据传递。每个组件都有可能提供给其他组件使用,主项目与组件、组件与组件之间的数据传递
UI跳转。
组件的生命周期。组件加载、卸载和降维的生命周期
集成调试。在开发阶段如何做到按需的编译组件?一次调试中可能只有一两个组件参与集成,这样编译的时间就会大大降低,提高开发效率。
代码隔离。如何杜绝耦合的产生。
详细内容可见下面的笔记介绍,由于篇幅原因,只展示了部分内容,需要完整学习笔记的小伙伴可以点此处直达免费下载方式。
1.组件化和模块化的区别
组件化和插件化的区别
组件化开发的优势
业务逻辑层
5.从组件化实战来解决问题
1.组件化演示案例
模块化和组件化
模块化
组件化
组件化Demo
项目分析
组件application和library动态切换
组件间的数据传递和方法调用
组件类(例如:Fragment)的获取,以及夸组件页面跳转和通讯
2. WanAndroid APP 组件化项目实战附demo
简介
版本更新
效果图
主要功能
项目目录结构
主要开源框架
1.从智行 Android 项目看组件化架构实践
前言
概述
组件化调整的原因和目标
组件化架构调整的整体规划
组件化架构调整中遇到的一些问题
组件化架构的实践成果
2.得到 App
Android彻底组件化demo发布
JIMU使用指南
组件化拆分的感悟
Android彻底组件化—代码和资源隔离
代码隔离
资源隔离
调试切换
组件化:代码隔离也难不倒组件的按序初始化
问题的根源
为什么不使用官方StartUp而选择造轮子
设计思路
有向无环图(DAG)
环校验
契合需求的排序方式
任务的描述
在JIMU中使用
重要事项
3.微信 App
微信Android模块化架构重构实践
微信Android架构历史
为何再次重构微信
重塑模块化
取舍和选择
代码之外,架构之内
4.蘑菇街 App
蘑菇街 App 的组件化之路
实现方式
组件生命周期管理
壳工程
遇到的问题
持续集成
周边设施
小结
蘑菇街 App 的组件化之路·续
统一的调用实现
通过 Category 来统一组件对外暴露的接口
更明确的表述
注册这个组件关心的 URL
注册这个组件能够被调用的方法/属性
在 App 生命周期的不同阶段做不同的响应
针对casatwy的一些回应
小结
5 爱奇艺 App
关于组件化
基于Service的IPC通信
组件化跨进程通信的核心诉求
Andromeda
架构分析
6.美团 App
外卖客户端容器化架构的演进
背景
美团外卖业务介绍
美团外卖移动端历史架构概述
美团外卖容器化架构全景图
什么是容器化架构
容器化架构的优势
外卖容器化架构全景图
容器化的挑战
外卖跨端容器建设
MRN容器
Titans容器
外卖页面容器建设
页面容器化设计思路
业务构建模块标准化
小结
外卖容器化架构的衡量指标
容器化架构衡量指标的特点
链路指标
关键指标
外卖容器化架构的监控运维
外卖容器化架构的发布能力
容器化架构发布体系
跟版本发布流程
bundle资源发布
多种发布能力综合使用
7. 美团Android组件化方案及组件消息总线modular-event实战
背景
组件化之前的状态
组件化方案调研
美团其他团队组件化方案调研
组件化方案
组件化消息总线框架modular-event
组件消息总线modular-event的实现
消息总线modular-event的结构
使用动态代理实现运行时调用
订阅和发送的模式
8. 美团Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
背景
发布/订阅模式
RxBus的出现
引入LiveDataBus的想法
为什么使用LiveData构建数据通信总线LiveDataBus
LiveDataBus的设计和架构
LiveDataBus最终实现
9.WMRouter:美团外卖Android开源路由框架
10.美团猫眼android模块化实战-可能是最详细的模块化实战
11.携程App(篇幅过长,无法展示全部)
12.支付宝 App
…
相信大家都知道安卓应用开发的大量难题,其实最后都需要插件技术去解决。
现今插件技术的使用非常普遍,比如微信、QQ、淘宝、天猫、空间、携程、大众点评、手机管家等等这些大家在熟悉不过的应用都在使用。
插件技术可以给项目开发带来巨大的好处,比如:并行高效开发、模块解耦、解除单个dex函数不能超过65535的限制、动态更新升级、按需加载等等。
掌握好插件技术,需要如下的安卓基础和相关知识,例如:
Android应用程序安装,加载过程
Android应用运行机制,生命周期调用原理
Android应用资源编译打包原理
Android应用读取资源原理
Android系统AMS、PMS、NMS等系统服务的运作原理
增量更新
HOOK等技术
本文将从基础的插件化原理到Android插件化初探再到大厂架构演化实战应用,总结出了较为全面与完整的安卓插件技术与插件化对 Android开发的重要性。
1.类加载
2.双亲委托机制
3.资源加载
4.四大组件支持
5 ProxyActivity代理
6 hook方式
7 其他组件
8 Android动态加载框架DL的架构与基本原理解析
9 Android 插件化框架 DynamicLoadApk 源码分析
1.从零开始实现一个插件化框架(1)
概念
插件化解决的问题
各插件化框架对比
插件化实现
ClassLoader实现类
2.从零开始实现一个插件化框架(2)
Activity的启动流程
寻找Hook点
撸码阶段
代理对象
偷天换日,替换原来的Intent
ActivityThread
将代理的intent替换回来
注意
3.从零开始实现一个插件化框架(3)
插件资源加载
Android中资源加载流程
ActivityManager
ActivityThread
AppCompatActivity
总结
1.360插件开发之DroidPlugin
插件开发之360 DroidPlugin源码分析
Hook机制类图关系
Hook机制的时序图关系
Manifest权限申请
基类Hook做了什么?
ProxyHook
BaseHookHandle
HookedMethodHandler
ReplaceCallingPackageHookedMethodHandler
IO重定向
递归遍历
以IPackageManager为例
插件开发之360 DroidPlugin源码分析之Binder代理
2. 滴滴VirtualApk实战
配置
应用
原理
总结
问题
3.基于VirtualAPK Android重构之插件化
Plug-in Hello World
插件化框架的选择
插件化原理
引入插件化之痛
总结
4.爱奇艺插件化原理分析之 Neptune框架
插件化基础知识点
类加载
插件化中资源使用限制
Apk打包流程
四大组件的插件化
Neptune源码分析
插件Activity任务栈
处理插件中的广播
5. 360开源全面插件化框架RePlugin 实战
RePlugin 介绍
宿主接入步骤
插件接入步骤
使用插架
6. 腾讯插件化框架 Shadow项目解析
框架简单介绍
框架结构分析
sample 示例代码 AndroidManifest.xml 分析
Activity 实现
替换插件 Activity 的父类
Service 实现
BroadcastReceiver 实现
ContentProvider 实现
框架自身动态化
总结
组件化后让代码结构非常清晰,分层结构以及之间的交互很明了,团队中的任何一个人都可以很轻松的绘制出代码结构图,这个在之前是没法做到的,并且每个组件的编译时间从 10 分钟降到了几十秒,工作效率有了很大地提升,最关键的还是解耦之后,每次开发需求的时候,面对的代码越来越少,不用背负那么重的代码包袱,可以说达到了“代码越写越少”的理想情况。如果你是一位Android开发者学好组件化是非常有必要的,而深入理解组件化的实战更是重中之重。
而插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概念的提出(Android版本),到2016年插件化的百花争艳,直至现在拆件化已成为Android开发必不可少的重点,可以说,插件化技术引领着Android技术的进步。
我相信一个高级程序员一定是勤奋的,可以快速地掌握大量 的新技术、新框架,不仅懂得原理,还能把新的技术落地到公司的产品中去。这是衡量程序员 工作能力的一个重要标准,那么怎样才能将技术运用自如呢?唯有实践。
关于文中学习笔记都是免费分享给大家的,有需要的小伙伴可以点此处免费获取。