【问题标题】:Custom class loading/overriding Android-native classes自定义类加载/覆盖 Android 原生类
【发布时间】:2012-01-13 22:18:06
【问题描述】:

主要目标是用我自己的实现覆盖 Android 系统类(Activity、View 等)。

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

实现了用于自定义类加载的ClassLoader,加载非系统类(自定义类)工作。

但是当我尝试用我的实现加载 Activity 时 - 它没有加载,因为 ClassLoader 的缓存中已经有这个类:

/**
 * Returns the class with the specified name if it has already been loaded
 * by the virtual machine or {@code null} if it has not yet been loaded.
 *
 * @param className
 *            the name of the class to look for.
 * @return the {@code Class} object or {@code null} if the requested class
 *         has not been loaded.
 */
protected final Class<?> findLoadedClass(String className) {
    ClassLoader loader;
    if (this == BootClassLoader.getInstance())
        loader = null;
    else
        loader = this;
    return VMClassLoader.findLoadedClass(loader, className);
}

如何更改类加载器以注入我自己的类而不是系统?

【问题讨论】:

    标签: java android reflection classloader dynamic-class-loaders


    【解决方案1】:

    我从一篇博文中找到了this solution。我知道发布链接是违反堆栈溢出策略的,但文本太大而无法传输。

    这个想法是编写一些覆盖低级类加载机制的 C 代码,从而覆盖方法的执行方式。我希望这可能对某人有所帮助。

    【讨论】:

      【解决方案2】:

      一个类一旦被 RootClassLoader 加载,除非先卸载,否则不能再次加载。但是,卸载类是一个由 DVM 自动管理的过程。我也被同样的问题困扰。

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        相关资源
        最近更新 更多