2011-12-06 13 views
8

El objetivo principal es anular la clase de sistema de Android (Actividad, Ver, etc.) con mi propia implementación. se implementaClase personalizada de carga/anulación de clases nativas de Android

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

cargador de clases para la carga de clase personalizada, la carga de clases no es del sistema (clase personalizada) funciona.

Pero cuando intento cargar Actividad con mi aplicación - no se carga, porque ya tiene cargador de clases de esta clase en su caché:

/** 
* 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); 
} 

¿Cómo puedo cambiar el cargador de clases para inyectar mi propia clase en lugar del sistema?

Respuesta

0

Una vez que RootClassLoader carga una clase, no se puede volver a cargar a menos que primero se descargue. Sin embargo, descargar una clase es un proceso que el DVM administra automáticamente. También estoy preocupado por el mismo problema.

3

He encontrado this solution desde una publicación de blog. Sé que es más bien contra las políticas de desbordamiento de pila publicar un enlace, pero el texto es demasiado grande para ser transferido.

La idea es escribir un código C que anule el mecanismo de carga de clases de bajo nivel y anule la forma en que se ejecuta un método. Espero que esto pueda ser de alguna ayuda para alguien.

Cuestiones relacionadas