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,
网友评论