Android_ClassLoader

1.关于 Android ClassLoader

基本原理跟 Java ClassLoader 相同.

所以在理解了 Java ClassLoader 的情况下,看 Android 的 ClassLoader 就比较简单了

若有不了解 Java ClassLoader 建议先去看看 Java 虚拟机这篇文章

然后再看 Android ClassLoader

也是主要的几个 ClassLoader 来构成 Android 中类的加载机制

1.BootClassLoader

2.PathClassLoader:类似于 JVM 中的 AppClassLoader

3.DexClassLoader:类似于 JVM 中的CustomClassLoader

4.BaseDexClassLoader:是 PathClassLoader 和 DexClassLoder 的父类

2.Android ClassLoader 源码分析

给出在线查看源码的地址

Android 源码

先看看 DexClassLoader

类的注释意思就是说,它负责从 dex 文件中加载类,并且还可以加载没有安装到应用程序的类.

所以它是实现动态加载的核心ClassLoader

而关于构造器的参数

dexPath:dex 文件的路径

optimizedDirectory:是我们指定的 dex 文件要被拷贝到的地址(一般为内部地址)

再看看 PathClassLoader

可以看到 PathClassLoader 只有两个构造器,

我们主要看看第二个构造函数,相比较于 DexClassLoader 的构造函数少了一个参数 String optimizedDirectory 正是因为少了这个参数,所以 PathClassLoader 只能加载应用程序中已经安装的类.

BaseDexClassLoader

这是 DexClassLoader 和 PathClassLoader 的父类,所有的工作都是在这个类里面完成的

而这个类主要的方法就是findClass(String name).

而 findClass(String name) 的整个实现过程(调用链)如下图

可以知道最后是通过一个 native 方法实现了加载