8

L'obiettivo principale è di ignorare la classe di sistema Android (Attività, Visualizza ecc.) Con la mia implementazione.Classe personalizzata caricamento/annullamento delle classi native Android

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

ClassLoader per classe personalizzata carico è implementato, il caricamento di classe non di sistema (classe personalizzata) funziona.

Ma quando provo a caricare di attività con la mia implementazione - non caricare, perché ClassLoader ha già questa classe nella cache:

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

Come posso cambiare class loader per iniettare la mia classe, invece del sistema?

risposta

0

Una volta che una classe viene caricata da RootClassLoader, non può essere caricata nuovamente a meno che non sia stata scaricata per prima. Tuttavia, lo scaricamento di una classe è un processo gestito automaticamente da DVM. Sono anche turbato dallo stesso problema.

3

Ho trovato this solution da un post sul blog. So che è piuttosto contro le politiche di overflow dello stack di pubblicare un link, ma il testo è troppo grande per essere trasferito.

L'idea è di scrivere un codice C che sovrascriva il meccanismo di caricamento della classe di basso livello e quindi sovrascrive il modo in cui viene eseguito un metodo. Spero che questo possa essere di aiuto a qualcuno.

Problemi correlati