名词:
dex:java文件编译class 然后生成 dex文件在Android上运行;
1.dex分包;
2.找出出现问题的dex文件进行替换操作
3.下载dex文件,静默替换有问题的dex文件,进行修改
热修复详解:
1.确定那些文件是主类,不能出现问题的类;
2.多分包;
3.下载dex文件;
4.写到本并且注入;
二、注入详解:
1.apk包安装完成之后存储路径:data/app/pacageName-1/base.apk 有分包文件classes.dex classes2.dex
java中使用类加载器加载 ClassLoader
Android中使用ClassLoader子类进行加载: BaseDexClassLoader加载 Dex文件
BaseDexLoader加载器源码解析:
里面有
DexPathList{
Elements[]
makeDexElements//该方法返回Dex文件数组
}
方法:makeDexElements: Elements[] 放的是Dex文件的个数
加载原理:
首先找到首个Dex文件运行,当MainActivity中调用其他Dex文件时,
会从Elements里面去找,如果没有就会抛异常:找不到文件
通过BaseDexClassLoader反射获取系统的 PathList的Elements;
通过BaseDexClassLoader反射获取最新Dex的PathList的Elements;
重组数组:切记:最新的Dex放到最前面;
在设置到系统Elements中