ClassLoader替换预加载的类?

时间:2011-07-08 17:26:56

标签: android reflection classloader dex

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

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

基本设置&伪代码:

  1. 修改android.net。*类,添加一些测试方法/等。
  2. 编译并以classes.dex
  3. 结束
  4. jar cf mytest.jar classes.dex
  5. 在APK资产中包含mytest.jar
  6. 创建DexClassLoader并通过loadClass()
  7. 获取Class Class对象上的
  8. getMethods()返回一个我希望在#1中没有修改的情况下看到的数组
  9. 我可以提供有关我正在使用的设置和代码的更多详细信息。

1 个答案:

答案 0 :(得分:8)

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