DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 ) 中 , 尝试启动 DEX 字节码文件中的...test() 方法 , 是可以执行成功的 ; 但是加载 Activity 组件类失败了 ;
其中的最主要原因是 , 类加载器的双亲委派机制 , 加载 Android 组件类需要使用系统指定的类加载器..., 这些类加载器设置在 LoadedApk 实例对象中 , 并且这些类加载器只能从特定位置加载字节码文件 ;
自己自定义的 DexClassLoader 没有加载组件类的权限 ;
如果要加载组件类 ,...有两种方案 :
替换类加载器 : 使用自定义的 DexClassLoader 类加载器替换 ActivityThread 中的 LoadedApk 中的类加载器 , 将原来的 LoadedApk 中的类加载器设置为新的父节点类加载器...;
插入类加载器 : 基于双亲委派机制 , 只要将我们自定义的类加载器插入到系统类加载器之上就可以 , 在 组件类加载器 和 最顶层的启动类加载器之间插入自定义的 DexClassLoader 类加载器即可