Android 热修复(一)

名词:

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中

       

   

猜你喜欢

转载自www.cnblogs.com/huihuizhang/p/11210835.html