androidAndroid技术知识Android开发

Android热修复技术原理详解(最新最全版本)

2019-08-13  本文已影响19人  像程序那样思考

本文框架

通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。

一、什么是热修复?

正常开发流程

image

热修复开发流程

image

热修复优势

image

修复什么?

image

二、热修复框架分类

现状:百花齐放百家争鸣

image

简单分类

image

更合理的分类

image

三、技术原理及特点

3.1 阿里Dexposed -- native解决方案

原理:

他的思想完全来源于Xposed框架,完美诠释了AOP编程,这里用到最核心的知识点就是在native层获取到指定方法的结构体,然后改变他的nativeFunc字段值,而这个值就是可以指定这个方法对应的native函数指针,所以先从Java层跳到native层,改变指定方法的nativeFunc值,然后在改变之后的函数中调用Java层的回调即可。实现了方法的拦截功能。


image image image

优点:

缺点:

3.2 阿里AndFix -- native解决方案

原理:

优点:

缺点:

AndFix(Dexpsed)框架不稳定的原因(痛点)

image image

3.3 QQ空间--Dex插桩方案(大众点评的Nuwa参考其实现并开源)

原理:

image

优点:

缺点:

插桩方案性能上的痛点:

image

3.4 美团Robust -- Instant Run 热插拔原理

原理:

image

优点:

缺点:

3.5 微信Tinker

原理:


image image

优点:

缺点:

Tinker已知问题:

Tinker性能痛点:

3.6 阿里Sophix

原理(双剑合璧):

image

优化Andfix(突破底层结构差异,解决稳定性问题):


Andfix底层ArtMethod结构时采用内部变量一一替换,倒是这个各个厂商是会修改的,所以兼容性不好。

image

Sophix改变了一下思路,采用整体替换方法结构,忽略底层实现,从而解决兼容稳定性问题。

image

突破QQ和Tinker的缺陷


QQ和Tinker的缺陷

image

Sophix对dex的解决方案

image

资源修复另辟蹊径


常用方案(Instant Run技术):这种方案的兼容问题在于替换AssetManager的地方

image

Sophix资源修复方案

image

SO修复另辟蹊径


image

四、Tinker框架解析

之所以只贴了Tinker的代码框架,是因为目前开源的方案中是最好的,当然除了Robust。

代码结构

image

修复流程

image

这里后续再补一个详细的源码分析,敬请期待

五、对比图(来自不同的地方)

来自Tinker的对比

image

来自Sophix的对比

image

来自蘑菇街 Android 热修复探索之路

image

其他文章

浅谈Android热修复:

image

六、总结

如果不考虑增大apk的体积,只是简单的修复代码,不修复so和资源,选择Robust是最稳定的,否则的话选择Tinker是一个不错的方案。虽然阿里Sophix横空出世,但是它不开源,而且商业收费,所以一般不是很赚钱的app选择收费的可能就很小了。不过它确实各方面都做了大量的优化,本文中的很多知识点也来源于阿里的《Android热修复技术原理.pdf》一书,本书值得一读,里面就是基于Sophix框架来编排的。

最后

最后感谢大家能看到这,希望能带给大家帮助!
同时也希望各位可以帮忙点个赞,转发分享一下,谢谢大家的支持!

漫漫开发之路,我们只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!

我从事Android开发十年多了,今年年初我花近两个月的时间收录整理了一套Android进阶知识体系,如果有想法深入的系统化的去学习,可以加入Android开发交流群(820198451),我会把我收录整理的资料都送给大家,帮助大家更快的进阶。

重要的事说三遍,转发+转发+转发,让更多需要的朋友们都可以看到并且领到!


简书点赞可以有好几种赞,长按点赞按钮就会有选项,大家点赞的时候,麻烦点个超赞~在这先谢谢您的支持啦!

上一篇下一篇

猜你喜欢

热点阅读