android 动态 dex,Android 动态加载dex

首先如果仅仅是因为64K method的问题可以直接看这里DexGuard、Proguard、Multi-dex给出的解决方案。

本文主要讨论从编译层面,dex动态加载器选择层面以及安全层面讨论dex动态加载

I. 类加载器

比较两个类是否相等: 前提是采用的是同样的加载器加载的,否则必不相等。

一般加载器类别

虚拟机的角度

1. 启动类加载器(Bootstrap ClassLoader)

使用C++语言实现,虚拟机自身的一部分。

2. 其他的类加载器

使用Java语言实现,独立于JVM外部,全部继承自类java.lang.ClassLoader。

开发人员角度

1. 启动类加载器(Bootstrap ClassLoader)层级: native层实现。

负责加载: JAVA_HOME\lib目录中能被JVM识别的类库加载到JVM内存中(名称不符合的类库不会被加载)(java的核心类,如 java.lang、java.util等,是java运行时环境所需类的一部分, 如果是Android,还会加载Android sdk层,如TextUtils, TextView等)。

使用关系: 无法被Java程序直接引用。

2. 扩展类加载器(Extersion ClassLoader)负责加载: JAVA_HOME\lib\ext目录中的类库(继承自java核心类的类)。

使用关系: 可以被开发者直接使用。

3. 应用程序类加载器(Application ClassLoader)系统类加载器。负责加载: 用户类路径(Classpath)上所指定的类库。Android中大多数的应用中的类(从odex中加载出来的类: 如 MainActivity、自定义View、XXXApplication

你可能感兴趣的:(android,动态,dex)