android中的classloader
- BootClassLoader,Android系统启动时会使用BootClassLoader来预加载常用类,与Java中的Bootstrap ClassLoader不同的是,它并不是由C/C++代码实现,而是由Java实现的。BootClassLoader是ClassLoader的一个内部类。
- PathClassLoader,全名是dalvik/system.PathClassLoader,可以加载已经安装的Apk,也就是/data/app/package 下的apk文件,也可以加载/vendor/lib, /system/lib下的nativeLibrary。
- DexClassLoader,全名是dalvik/system.DexClassLoader,可以加载一个未安装的apk文件。
App系统类加载器是PathClassLoader,而BootClassLoader是其parent类加载器。
android中class类加载过程
- BaseDexClassLoader
- DexPathList
- makeDexElements
- loadDexFile
- loadDex
- loadClassBinaryName
- defineClass
android热修复问题
因为存放dex是一个数组DexElements ,在加载class类对象是按顺序从dex中加载,所以将修复的dex放在数组前面可完成热修复问题