是否可以拦截Android的默认类加载并有条件地避免加载类?
我的动机是拦截Android的默认类加载过程,并避免根据条件加载类,如
if (!fooScope) {
throw IllegalStateException("Trying to load class from FooScope");
}
我不打算改变加载类的位置,而是对在什么时间点加载哪些类进行细粒度控制,我称之为严格类加载。在此,不应加载任何在满足某些条件之前不应加载的类。我正在寻找拦截类加载的方法来实现这一点。
答案 0 :(得分:0)
您可能需要使用某种挂钩库。 像这个只支持Android 4.4的库(https://github.com/cmzy/ZHookLib)
然后你需要挂钩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并且我不确定如果抛出异常将会发生什么。
我希望它有所帮助