当先锋百科网

首页 1 2 3 4 5 6 7

Android热修复大白话版(导读)

首先需要考虑的是类加载机制

常见的有以下四个类加载器:

PathClassLoader
DexClassLoader
BaseDexClassLoader
DexPathList

接着,我们知道:

Android类加载器在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。这个过程中遍历的是【数组】,而数组中每一个元素都是【dex文件】类型。

最后:

在循环中,首先遍历出来的是dex文件,然后再是从dex文件中获取class。因此,只要把没有Bug的class打包成一个dex文件,放于Element数组的第一个元素,在进行加载时这样就能保证系统优先获取到的class是第一个元素即修复好的class。

需要注意的是,此时有bug的class还是存在的,只不过在数组的最后,不能被加载到。当进行大版本迭代时,还是得换包处理的。