@946898963
2020-07-15T17:58:51.000000Z
字数 778
阅读 808
Android热修复
以AndFix最著名。原理如下图:
其修复过程如图:
这套方案直接使用dalvik_replaceMethod
替换class中方法的实现。由于它并没有整体替换class,而field在class中的相对地址在class加载时已确定,所以AndFix无法支持新增或者删除field的情况(通过替换init与clinit只可以修改field的数值)。
详细原理介绍传送。
我用自己的话总结一下:
CLASS_ISPREVERIFIED
标志,具体的说明可以参考上述文章;需要注意,dexopt是优化dex的,如果给所有的类都做非preverify,势必会引起一些性能上的损耗。Tinker的思路,使用差异dex文件和旧的dex文件,生成修复后的,新的dex文件,从而达到完全使用新的dex的修复效果。