先说组件化:
背景
组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。每个大厂内部的各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产出。本文主要介绍我们的组件化方案,希望对从事Android组件化开发的同学能有所启发。
为什么要组件化
近年来,为什么这么多团队要进行组件化实践呢?组件化究竟能给我们的工程、代码带来什么好处?我们认为组件化能够带来两个最大的好处:
1.提高组件复用性
可能有些人会觉得,提高复用性很简单,直接把需要复用的代码做成Android Module,打包AAR并上传代码仓库,那么这部分功能就能被方便地引入和使用。但是我们觉得仅仅这样是不够的,上传仓库的AAR库是否方便被复用,需要组件化的规则来约束,这样才能提高复用的便捷性。
2.降低组件间的耦合
我们需要通过组件化的规则把代码拆分成不同的模块,模块要做到高内聚、低耦合。模块间也不能直接调用,这需要组件化通信框架的支持。降低了组件间的耦合性可以带来两点直接的好处:第一,代码更便于维护;第二,降低了模块的Bug率。
怎样实现组件化
要实现组件化需要考虑的问题主要包括下面几个:
-
代码解耦。将一个庞大的工程拆分解耦,这是非常耗时耗力的工作,但这也是最基础最重要的一步
-
数据传递。每个组件都有可能提供给其他组件使用,主项目与组件、组件与组件之间的数据传递
-
UI跳转。
-
组件的生命周期。组件加载、卸载和降维的生命周期
-
集成调试。在开发阶段如何做到按需的编译组件?一次调试中可能只有一两个组件参与集成,这样编译的时间就会大大降低,提高开发效率。
-
代码隔离。如何杜绝耦合的产生。
详细内容可见下面的笔记介绍,由于篇幅原因,只展示了部分内容,需要完整学习笔记的小伙伴可以点此处直达免费下载方式。
第一章 Android组件化初识
1.组件化和模块化的区别
-
组件化和插件化的区别
-
组件化开发的优势
-
业务逻辑层
5.从组件化实战来解决问题
- Android组件化基础
第二章 Android组件化初探
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 源码分析
imageAndroid插件化初探
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技术的进步。
我相信一个高级程序员一定是勤奋的,可以快速地掌握大量 的新技术、新框架,不仅懂得原理,还能把新的技术落地到公司的产品中去。这是衡量程序员 工作能力的一个重要标准,那么怎样才能将技术运用自如呢?唯有实践。
关于文中学习笔记都是免费分享给大家的,有需要的小伙伴可以点此处免费获取。
网友评论