2011-12-06 11 views
8

Głównym celem jest zastąpienie klasy systemu Android (Activity, View itp.) Moją własną implementacją.Własne klasy ładowanie/przesłanianie klas rodzimych dla Androida

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

ClassLoader za zwyczaj klasa obciążenia jest realizowana, załadunek klasy non-System (niestandardowe klasy) działa.

Ale gdy próbuję załadować aktywny z moim realizacji - nie ładować, ponieważ ClassLoader ma już tej klasy w swojej pamięci podręcznej:

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

Jak mogę zmienić ładującego klasy wstrzyknąć moje własne klasy zamiast systemu?

Odpowiedz

0

Po załadowaniu klasy przez RootClassLoader, nie można jej ponownie załadować, chyba że zostanie najpierw rozładowana. Jednak wyładowanie klasy jest procesem, który jest automatycznie zarządzany przez DVM. Martwi mnie również ten sam problem.

3

Znalazłem this solution z wpisu na blogu. Wiem, że jest raczej przeciwko regułom przepełnienia stosu, aby opublikować link, ale tekst jest zbyt duży, aby można go było przenieść.

Chodzi o to, aby napisać kod C, który nadpisuje mechanizm ładujący klasy niskiego poziomu, a tym samym zastąpi sposób, w jaki metoda jest wykonywana. Mam nadzieję, że to może być jakaś pomoc dla kogoś.

Powiązane problemy