走投无路之下,我想起,诶!很多 app 热更方案不是说支持 lib 热更吗!那先作为一个保底方案吧。
步骤
通过业务方 app 热更 lib 包。
优缺点
优点:
- 热更权把控在业务方手中,对业务方透明
缺点:
-
lib 包太大时,下载还是很耗流量的
-
diff 算法无法计算新旧 lib 的差异,只能整个替换掉
-
步骤相当繁琐,如下图:
业务方会杀了你的!
方案四:改造现有 APP 热修复方案
1. 那在选择热修复方案时考虑点有哪些?
1. 热更项目的需求
-
只需要简单的方法级别 Bug 修复?
-
需要资源及 so 库的修复?
-
需要 Native 的修复?
-
对平台兼容性要求及成功率要求?
-
是否需要对补丁包进行管理?
-
公司资源是否支持商业付费?
2. 学习及使用成本
-
集成难度和复杂度
-
代码侵入性
-
调试维护
3. 选择框架的关注点
-
尽量大厂
-
性能过关
-
有专人维护
-
热度高,开源社区活跃
2. 总结出需要热更的 SDK 特点
-
主要是代码热更,无so库、资源更新需求;
-
实时性要求高,因为一旦出问题,对业务方的影响极大;
-
兼容性要求高,你无法预料到业务方的活跃用户都有啥机型。
3. 那我们赶紧来看下,现有的 APP 热修复方案都有哪些?
3.1 综合优化的产物 —— Sophix(弃)
Sophix 功能完善、开发简单透明,可惜没开源,无法改造。
3.2 底层替换方案(弃)
底层替换方案不可避免地存在兼容问题,弃之。
3.3 类加载方案 —— Tinker
优点:
-
用户多
-
更新时间新,相比之下,其他有在Github上开源的框架,star数都是7000以下,上次更新时间都在1年前,甚至2年前。
缺点:
-
dex合成占用ROM较大
-
不够实时
-
需要改造Application,业务方有感知。(也可以参考 InstantRun 做到不修改 Application 达到替换 Application 的效果,但该方案大量 hook 系统 api,不够稳定,大概有 1/1w 的概率会出现替换失败,所以Tinker最终还是没有使用InstantRun的方式)
还有两个问题,留给大家去思考:
-
会不会影响业务方加固?
-
和业务方是否冲突?
- 方案参考:
基于Tinker的SDK全局热更新方案(全网唯一)
- 扩展:
InstantRun 如何动态替换 Application,总结起来就两步:
- 打包时替换 Application 标签,插入BootstrapApplication
- 运行时 hook 系统api,将 BootstrapApplication 换回 MyApplication
3.4 插桩 —— 美团 Robust
Robust 的原理可以简单描述为:
-
打基础包时插桩,在每个方法前插入一段 if(changeQuickRedirect==null)-else 的逻辑;
-
加载补丁时,从补丁包中读取要替换的类及具体替换的方法实现,新建 ClassLoader 加载补丁 dex,当目标方法被执行时,此时 changeQuickRedirect != null,方法逻辑流程被改变,而替换掉之前的旧逻辑,达到 fix 的目的。
流程图
优点:
-
兼容性最优,兼容加固
-
实时生效
-
粒度细,支持方法级别的修复
-
高稳定性,修复成功率高达99.9%
缺点:
-
在编译阶段插件侵入了产品代码,对运行效率、方法数、包体积还是产生了一些副作用。(支持指定某些class无需插入)
-
so和资源的替换目前暂未实现
-
无法新增变量
-
没有补丁管理和安全校验,需要开发者自行实现
思考:
- 和其他的插桩插件混用是否有冲突?
就在我美滋滋地接入 Robust 时,问题来了!
Robust 需要是 Application 才能插桩和打补丁,要用在 SDK 上,还是需要一轮改造的。
如何改造?我将在下篇博文中详解,同时将推出封装好的库,让 SDK 开发者只需 5 分钟即可让自己的 SDK 拥有热修复的能力,敬请期待。
当然,我们的焦点并不局限在技术实现上,还有很多值得我们去考虑的:
我们怎么对分发进行控制?对监控数据进行统计?如果补丁引起了崩溃,我们怎么第一时间补救?
1. 精准分发
结合外部维度系统,根据用户维度,比如渠道、系统版本等等做有差别的下发。
2. 数据分析
上线后我们最关心的就是补丁的兼容性和成功率。
-
补丁拉取成功率 = 请求补丁成功的用户 / 发起请求补丁的用户
-
补丁下载成功率 = 下载补丁成功的用户 / 尝试下载补丁的用户
-
patch应用成功率 = patch成功的用户 - 回滚的用户 / 补丁下载成功的用户
3. 补丁回滚机制
我们需要支持自动监控崩溃,如果是下发的补丁引起的,则下次启动补丁自动失效,避免扩大影响范围。
Android开发资料+面试架构资料 免费分享 点击链接 即可领取
《Android架构师必备学习资源免费领取(架构视频+面试专题文档+学习笔记)》
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

文末
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【视频教程】
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
[外链图片转存中…(img-bsTZxFMm-1712450941645)]
[外链图片转存中…(img-7ShAgag5-1712450941645)]
【视频教程】
[外链图片转存中…(img-zV8vVvZN-1712450941645)]
天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!