Android热修复实现:是基于dex分包方案,和Android虚拟机的类加载器(ClassLodaer)实现的。
当分包之后,会形成一个dex包的有序数组。当需要加载类文件时,ClassLoader会从数组中第一个dex包开始加载,直至找到该类为止。
当多个包中都包含相同类文件时,会取第一个类文件作为返回
热修复是通过将已修复了bug的文件打成dex包(如:patch.dex),并将该补丁包放入dex分包的有序数组的最前面。当加载类文件时,此时的patch.dex中已修复的类文件就取代了dex包相对靠后的原本存在bug的类文件,从而实现了bug修复
优点
无需重新发版
用户无感知修复,无序重新下载
阿里:AndFix、Dexposed、阿里百川、Sophix
腾讯:微信的Tinker、QQ空间的超级补丁、手机QQ的QFix
美团的Robust、饿了么的Amigo、美丽说蘑菇街的Aceso
其他:RocooFix、Nuwa、AnoleFix