ClassLoader 来替换预加载的类?

发布于 2024-11-19 12:47:12 字数 629 浏览 4 评论 0原文

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

具体: 在我的应用程序中创建 WebView 之前,我尝试使用 DexClassLoader 替换 android.net.* 中找到的类。我可以获得一个 Class 对象,但 getMethods() 例如为我提供了一个我在未修改/原始类实现中期望的数组。这是由于预加载类系统造成的吗?

基本设置和伪代码:

  1. 修改android.net.*类,添加一些测试方法等。
  2. 编译并最终得到classes.dex
  3. jar cf mytest.jarclasses.dex
  4. 在APK资产中包含mytest.jar
  5. 创建DexClassLoader并通过loadClass()获取类
  6. Class对象上的getMethods()返回一个我希望看到的数组,而不需要修改在 #1 中,

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

General question:
Is it possible to use a ClassLoader to replace a pre-loaded (by the system, e.g. found in Android's %android%/frameworks/base/preloaded-classes file) class?

Specific:
I am attempting to use the DexClassLoader to replace a class found in android.net.* before creating a WebView in my application. I can get a Class object, but getMethods() for example gives me an array I'd expect in the unmodified/original class implementation. Is this due to the preloaded-classes system?

Basic setup & pseudo code:

  1. Modify android.net.* class, adding a few test methods/etc.
  2. Compile and end up with classes.dex
  3. jar cf mytest.jar classes.dex
  4. Include mytest.jar in APK assets
  5. Create DexClassLoader and get Class via loadClass()
  6. getMethods() on Class object returns an array I'd expect to see without modifications present in #1

I can provide more details on the setup I'm using and code if needed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

荒人说梦 2024-11-26 12:47:12

不,你不能。 WebView 是引导类路径的一部分,因此是基类加载器。您无法让它使用另一个类加载器中的类。事实上,在您的应用程序启动之前(作为 zygote 进程预初始化的一部分),它已经被加载并链接到它使用的类。

No you can not. WebView is part of the boot class path, and thus the base class loader. There is nothing you can do to make it use classes in another class loader. In fact, it has already been loaded and linked to the classes it uses before your app is even launched (as part of the zygote process pre-initialization).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文