Android技术知识Android开发经验谈Android开发

2018 深入解析Android热修复技术

2018-11-15  本文已影响20人  df556ada620a

本文框架

通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下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

原理:

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 image

六、总结

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

Android技术交流QQ群;701740775。
本群提供免费的学习指导 资料视频像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等内容 以及免费的解答。不懂得问题都可以在本群提出来 ,之后还会有职业生涯规划以及面试指导,加群请备注简书
上一篇下一篇

猜你喜欢

热点阅读