是否有可能拦截Android的默认类加载并有条件地避免加载类?
我的动机是拦截Android的默认类加载过程,避免基于条件加载类,比如
if (!fooScope) {
throw IllegalStateException("Trying to load class from FooScope");
}我不打算更改从何处加载类,而是对哪些类可以在什么时候加载(我称之为严格类加载)进行细粒度控制。在这种情况下,在满足某些条件之前不应该加载的任何类都不应该加载。我正在寻找方法来拦截类加载来实现这一点。
发布于 2017-12-27 04:07:46
你可能需要使用某种挂钩库。就像这个库(https://github.com/cmzy/ZHookLib),它只支持Android4.4
然后,您需要挂起ClassLoader.class的loadClass(String )方法,以查看所有加载的类。
但是,仍然存在加载类的顺序问题。您可以尝试从扩展应用程序的类中执行此操作,该类可能先加载,但我不确定。
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 of ClassLoader,你应该可以做你喜欢做的事了。请记住,有多个ClassLoader,我也不确定如果抛出异常会发生什么。
我希望它能帮上忙
https://stackoverflow.com/questions/47985816
复制相似问题