Android类加载

android中的classloader

  1. BootClassLoader,Android系统启动时会使用BootClassLoader来预加载常用类,与Java中的Bootstrap ClassLoader不同的是,它并不是由C/C++代码实现,而是由Java实现的。BootClassLoader是ClassLoader的一个内部类。
  2. PathClassLoader,全名是dalvik/system.PathClassLoader,可以加载已经安装的Apk,也就是/data/app/package 下的apk文件,也可以加载/vendor/lib, /system/lib下的nativeLibrary。
  3. DexClassLoader,全名是dalvik/system.DexClassLoader,可以加载一个未安装的apk文件。

App系统类加载器是PathClassLoader,而BootClassLoader是其parent类加载器。

android中class类加载过程

  1. BaseDexClassLoader
  2. DexPathList
  3. makeDexElements
  4. loadDexFile
  5. loadDex
  6. loadClassBinaryName
  7. defineClass

android热修复问题

因为存放dex是一个数组DexElements ,在加载class类对象是按顺序从dex中加载,所以将修复的dex放在数组前面可完成热修复问题