ClassLoader替换预加载的类?

NuS*_*ler 9 reflection android classloader dex

一般问题: 是否可以使用ClassLoader替换预加载(通过系统,例如在Android的%android%/ frameworks/base/preloaded-classes文件中找到)类?

具体: 我试图在我的应用程序中创建WebView之前使用DexClassLoader替换android.net.*中找到的类.我可以得到一个Class对象,但getMethods()例如给了我一个我希望在未修改/原始类实现中的数组.这是由于preloaded-classes系统吗?

基本设置和伪代码:

  1. 修改android.net.*类,添加一些测试方法/等.
  2. 编译并以classes.dex结束
  3. jar cf mytest.jar classes.dex
  4. 在APK资产中包含mytest.jar
  5. 创建DexClassLoader并通过loadClass()获取Class
  6. Class对象上的getMethods()返回一个我期望在#1中没有修改的数组

我可以提供有关我正在使用的设置和代码的更多详细信息(如果需要).

hac*_*bod 8

你不能.WebView是引导类路径的一部分,因此也是基类加载器的一部分.没有什么可以使它在另一个类加载器中使用类.事实上,它已经被加载并链接到它甚至启动应用程序之前使用的类(作为zygote进程预初始化的一部分).