Загрузка / переопределение пользовательских классов для Android-классов

Основная цель – переопределить системный класс 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); } 

Как я могу изменить загрузчик классов для ввода моего собственного класса вместо системы?

Solutions Collecting From Web of "Загрузка / переопределение пользовательских классов для Android-классов"

Я нашел это решение из сообщения в блоге. Я знаю, что это скорее против политики переполнения стека, чтобы опубликовать ссылку, но текст слишком велик для передачи.

Идея состоит в том, чтобы написать некоторый C-код, который переопределяет низкоуровневый механизм загрузки классов и, таким образом, переопределяет способ выполнения метода. Надеюсь, это может помочь кому-то.

Когда класс загружается RootClassLoader, он не может быть загружен снова, если он сначала не выгружен. Однако разгрузка класса – это процесс, который автоматически управляется DVM. Меня тоже беспокоит та же проблема.