Пользовательские классы загрузки / переопределения Android-нативных классов - PullRequest
8 голосов
/ 06 декабря 2011

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

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

Ответы [ 2 ]

3 голосов
/ 10 октября 2015

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

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

0 голосов
/ 31 марта 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...