Android перехватывает загрузку класса

Можно ли перехватить загрузку класса Android по умолчанию и условно избежать загрузки класса?

Моя мотивация состоит в том, чтобы перехватить процесс загрузки класса по умолчанию в Android и избежать загрузки класса в зависимости от условия, что-то вроде

if (!fooScope) {
  throw IllegalStateException("Trying to load class from FooScope");
}

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

1 ответ

Вы, вероятно, должны будете использовать какую-то библиотеку Hooking. как эта библиотека ( https://github.com/cmzy/ZHookLib), которая поддерживает только до Android 4.4

тогда вам нужно подключить метод loadClass(String name) класса ClassLoader.class, чтобы увидеть все загруженные классы.

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

public class MyApplication extends Application {
    static {
       // code in static block is executed when the class is loaded
       Set<Unhook> unhooks2 = ZHook.hookAllMethods(ClassLoader.class, "loadClass", new MethodHook() {...});
    }

как только вы подключили loadClass к ClassLoader, вы сможете делать то, что вам нравится. помните, что существует более одного ClassLoader, а также я не уверен, что произойдет, если вы выбросите исключение.

Я надеюсь, что это помогает

Другие вопросы по тегам