Android中的类加载器 - ClassLoader派生出的DexClassLoader和PathClassLoader

1. Java —— 是在JVM虚拟机 执行jar


java的可执行文件是jar文件,运行在JVM虚拟机上,JVM虚拟机通过 ClassLoader加载 jar文件,并且执行里边的代码逻辑;

2. Android —— 是在 Dalvik/ART虚拟机 执行 dex文件


  • 在程序运行时候首先把对应的类加载到内存中;
  • Android的可执行文件是 dex文件,运行在 Dalvik/ART虚拟机上,在apk文件中会有一个或多个 dex文件,而我们写的所有的代码都会被编译到这些 dex文件中,Android运行的时候就是通过执行这些 dex文件来完成应用功能的;

3. Dalvik虚拟机类加载机制


Dalvik虚拟机不能直接用ClassLoader加载 .dex文件,Android从ClassLoader派生出两个类,DexClassLoader和PathClassLoader,这两个类是我们加载 dex文件的关键,二者区别在于:

  • DexClassLoader:可以加载jar/apk/dex,可以从SD卡中加载未安装的 apk;
  • PathClassLoader:只能加载已经安装的 apk文件;

Android中的类加载源码分析可参照我下边文章:
ClassLoader类加载器源码分析

你可能感兴趣的:(Android中的类加载器 - ClassLoader派生出的DexClassLoader和PathClassLoader)