热修复二(Tinker)

热修复方案目前来讲,稳定性最好当属Tinker了。它已经运行在数亿台安卓设备上了。

它的接入方式可以参考官方github地址,点击wiki,里面有详细的接入方式。同时,参考文章也提供了很多接入的信息,可以一起看看,有助于快速接入。

原理

image.png

可以看出:

tinker将old.apk和new.apk做了diff,拿到patch.dex,然后将patch.dex与本机中apk的classes.dex做了合并,生成新的classes.dex,运行时通过反射将合并后的dex文件放置在加载的dexElements数组的前面。

运行时替代的原理,其实和Qzone的方案差不多,都是去反射修改dexElements。

两者的差异是:Qzone是直接将patch.dex插到数组的前面;而tinker是将patch.dex与app中的classes.dex合并后的全量dex插在数组的前面。

tinker这么做的目的还是因为Qzone方案中提到的CLASS_ISPREVERIFIED的解决方案存在问题;而tinker相当于换个思路解决了该问题。

接下来我们就从代码中去验证该原理。

参考文章

https://github.com/Tencent/tinker/wiki
http://blog.csdn.net/lmj623565791/article/details/54882693
http://blog.csdn.net/a750457103/article/details/52815096

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容