热修复方案目前来讲,稳定性最好当属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
网友评论