android热修复

热修复技术

1:qq空间超级补丁

2:微信Tinker

3:饿了么Amigo

4:美团Robust :

5:360RePlugin :

6:滴滴出行VirtualAPK 等

dex文件原理:单个dex文件,全部最多65536个方法

dex分包:app启动时必须用到的类类和这些类文件放在主dex文件,其他放在次dex文件

类加载器:java的类加载器是加载class文件,而Android的虚拟机无论是dvm还是art都只能识别dex文件,所以java的类加载器在Android中不适用,Android中的 Java.lang.ClassLoader类也不同与java中的Java.lang.ClassLoader类。

ClassLoader层级关系为ClassLoader—>BaseDexClassLoader —>Dex ClassLoader和PathClassLoader,

其中:

PathClassLoader是用来加载Android系统类和应用的类

DexClassLoader支持加载APK、DEX和JAR,也可以从SD卡进行加载 ClassLoader类根据一个指定的类名称,找到或者生成相应的字节码,然后从这些字节码中定义出一个java类 DexClassLoaderPathClassLoader都属于符合双亲委派模型的类加载器(因为它们没有重载loadClass方法)。

类加载热修复:当分包完成之后,会形成一个dex包的有序数组,当需要加载类加载器的时候,会从数组中第一个dex包开始加载,直到找到这个类为止,当多个dex包中都有这个文件的时候,就取第一个文件,热修复是通过将已经修复了的bug包打成dex包,并将这个dex包放在有序数组的第一个,当加载类文件的时候,首先会找到修改好的dex包去替换之前存在bug的dex包,而排在后面的存在bug的dex包根据类加载器的双亲委派机制不会被加载,这就是类加载热修复方法的实现。