dexClassLoader实现热修复原理

android每次启动过程中都是通过jvm来加载dex文件的

dex文件的又来java---class---dex

热修复就是每次在app启动时,加载我们自己的patch.dex文件,不是修复的dex文件

apk中class.dex文件是通过pathClassLoader来加载的

dexclassLoader用来加载sd开上的.jar包和apk文件

dexClassLoader和pathClassLoader是通过基类baseDexclassLoder查找class。通过其内部的DexPathList pathList 来查找的

DexPathList内部有一个Element[] dex数组,通过findClass方法遍历element数组,一旦找到就返回

插入我们自己的dex文件

创建dexClassLoader将我们的dex文件穿进去

通过反射拿到我们dexClassloader中的dexPathList中的element

拿到apk的dexClassLoader使用反射的方式拿到dexPathList中的element

最后将patch中的element和apk中的element合并在一起通过反射修改apk中的element,

你可能感兴趣的:(dexClassLoader实现热修复原理)