是否可以拦截Android的默认类加载并有条件避免加载类?
我的动机是拦截Android的默认类加载过程并避免根据条件加载类,例如
if (!fooScope) {
throw IllegalStateException("Trying to load class from FooScope");
}
我不打算更改类加载的地方的位置,而是要在什么时间点可以加载哪些类可以加载哪些类,我称之为严格的类加载。在此,不应加载任何一个不应加载的类,不应加载。我正在寻找拦截类加载以实现这一目标的方法。
您可能需要使用某种钩库。像这个图书馆(https://github.com/cmzy/zhooklib),仅支持Android 4.4
然后您需要连接loadClass(字符串名称)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() {...});
}
挂钩classloader的负载级后,您应该能够做自己喜欢的事情。请记住,有一个以上的classloader,而且我不确定如果您抛出异常会发生什么。
我希望它能有所帮助