全网独家盘点Android热修复方案(含阿里巴巴、美团、腾讯等)
题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框
使用方法:
在需要修复的方法上面,加上@MethodReplace注解,给定参数,class和method,表示 该方法替换为 哪个类的哪个方法。
缺陷:修复粒度为:method. AndFix只能以方法为粒度去修复bug。作用有限,针对大范围的类替换和资源替换,那就无能为力了。
Robust 是 即时生效的Java层实现的热修复实现方案.
美团的Robust方案,是参考了谷歌的InstantRun方案(之前在androidStudio里面有这个选项,可以选择打开instant run运行app)的思路而设计出来的。
其主要设计思想就是一句话:编译打包时,在程序的某些方法里面,都插入一段代码(全自动操作):
当
changeQuickRedirect不为空的时候,该方法就会命中if(changeQuickRedirect!=null),从而执行修复的实现代码。当为空的时候,则正常执行原逻辑。
而平时我们自己编码,只需要加上一个
@modify注解,来标记这个方法需要打补丁包,也就是需要插入上面这个if(changeQuickRedirect!=null)代码段。
为什么它可以即时生效?
上图解析:利用ClassLoader,当客户端手机收到补丁包 patch.dex的时候,执行补丁包,把指定方法的
changeQuickRedirect用反射的手段赋值,让它变成非空。从而让下一次程序逻辑走到这里的时候,走修复之后的逻辑。
Robust是如何将这么多 ****if(changeQuickRedirect!=null)代码段插入到代码逻辑中的?:
上图中的
if(changeQuickRedirect!=null)代码段,并非我们手动编写,而是由Robust框架自动插入的。这个技术叫做 字节码插桩,意为:对class进行操作,按照class文件的格式,插入自己想要的逻辑。目前Robust支持两种字节码插桩方案AspectJ和Javasist.
腾讯 Tinker dexdiff / DexMerge方案
Tinker 是腾讯自研的 重启生效的 Java层的实现.
原理
Tinker基于一个基准dex,以及修复bug之后的dex,使用dexdiff算法,计算出差分包dex。然后把差分包推送给客户端,客户端收到之后,重启运行app,把差分包dex和原dex进行合并,形成新的dex。然后ClassLoader去创建类class对象的时候,就会创建修复bug之后的类class对象。从而达到 修复bug的目的。
Dexdiff算法
了解增量更新的人应该知道 bsdiff。bsdiff是无视文件格式,生成两个二进制文件的差异文件。dexdiff是基于bsdiff,并且进行了针对dex文件格式的优化。Tinker除了支持Dex修复之外,还支持so修复,只不过so的差分包,是直接使用的bsdiff算法生成的。
Multidex方案是 基于ClassLoader的 纯java实现 的 重启生效的热修复方案.
原理
Apk打包的时候可能生成多个classes.dex文件。JVM中 类加载器ClassLoader,在程序运行使用到某一个Class的时候,是按照顺序查找的方式进行的。一旦找到,就会缓存起来,下一次loadClass就不会去查找,而是直接使用缓存中的(所以Muitldex方案必须重启app). 而,当我们把补丁dex文件放到 顺序查找的最前面,那么类加载器 查找到它之后,就会直接使用。原来的同样的类便处于后方,不会再生效。由此,使用补丁Class完全替换了 原class.
至于更深入的原理,上一篇 Android Muitldex热更新修复方案原理已经给出了详细讲解。在此就不赘述。
======================================================================
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有65535,应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
本人从网上搜集到了阿里P8大佬花了将近半个月时间将Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架整合成了一套系统知识笔记PDF,长达1042页!相信看完这份文档,你将会对这些Android第三方框架有着更深入、更系统的理解。
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,1042详细完整版的【Android设计思想解读开源框架】文档领取方式:点赞+关注,然后私信关键词 【1】即可获得免费领取方式!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android进阶学习视频】、【全套Android面试秘籍】
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
6257114)]
【Android进阶学习视频】、【全套Android面试秘籍】
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
更多推荐












所有评论(0)