0

是否可以拦截Android的默认类加载并有条件地避免加载一个类?

我的动机是拦截Android的默认类加载过程并避免根据条件加载类,例如

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

我不打算更改加载类的位置,而是要对可以在什么时间点加载哪些类进行细粒度控制,我称之为Strict class loading。在这种情况下,在满足某些条件之前不应该加载的任何类都不应该被加载。我正在寻找拦截类加载以实现此目的的方法。

4

1 回答 1

0

您可能需要使用某种 Hooking 库。像这个库(https://github.com/cmzy/ZHookLib),它只支持到 Android 4.4

那么你需要挂钩 ClassLoader.class 的 loadClass(String name) 方法才能看到所有加载的类。

但仍然存在加载类的顺序问题。您可以尝试从扩展应用程序的类中执行此操作,该类可能首先加载但我不确定..

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() {...});
    }

一旦你挂钩了 ClassLoader 的 loadClass,你应该能够做你喜欢的事情。请记住,有不止一个 ClassLoader,而且我不确定如果抛出异常会发生什么。

我希望它有帮助

于 2017-12-27T04:07:46.877 回答