首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android拦截类加载

Android拦截类加载
EN

Stack Overflow用户
提问于 2017-12-27 03:00:32
回答 1查看 169关注 0票数 0

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

我的动机是拦截Android的默认类加载过程,避免基于条件加载类,比如

代码语言:javascript
复制
if (!fooScope) {
  throw IllegalStateException("Trying to load class from FooScope");
}

我不打算更改从何处加载类,而是对哪些类可以在什么时候加载(我称之为严格类加载)进行细粒度控制。在这种情况下,在满足某些条件之前不应该加载的任何类都不应该加载。我正在寻找方法来拦截类加载来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2017-12-27 04:07:46

你可能需要使用某种挂钩库。就像这个库(https://github.com/cmzy/ZHookLib),它只支持Android4.4

然后,您需要挂起ClassLoader.class的loadClass(String )方法,以查看所有加载的类。

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

代码语言:javascript
复制
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,我也不确定如果抛出异常会发生什么。

我希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47985816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档