热修复技术
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类 DexClassLoader和PathClassLoader都属于符合双亲委派模型的类加载器(因为它们没有重载loadClass方法)。
类加载热修复:当分包完成之后,会形成一个dex包的有序数组,当需要加载类加载器的时候,会从数组中第一个dex包开始加载,直到找到这个类为止,当多个dex包中都有这个文件的时候,就取第一个文件,热修复是通过将已经修复了的bug包打成dex包,并将这个dex包放在有序数组的第一个,当加载类文件的时候,首先会找到修改好的dex包去替换之前存在bug的dex包,而排在后面的存在bug的dex包根据类加载器的双亲委派机制不会被加载,这就是类加载热修复方法的实现。