0

我试图实现一个 RemoteClassLoader,它复制和加载将在运行时使用的所有类。首先我需要收集使用过的类,我找到了一个解决方案:

找出使用给定 API 的哪些类

但这并不是真正需要的,它只收集“可见”类的用法,就像加载类并迭代所有声明的字段和方法,并收集所有类型一样。我有一个只包含静态方法的类,这个方法的实例没有被使用,所以它永远不会被赋予一个函数或者是一个文件,所以我看不到那个类。

自然地,字节码文件包含这个类的名称:

strings TestClass.class | grep -i "json"

gives: org/json/JSONObject

是的,我搜索但不喜欢的课程。我怎样才能找到它?还有其他我只在函数中使用的。

4

1 回答 1

0

最简单但保守的方法是简单地Class_info从常量池中获取所有条目。为了调用方法或访问类的字段,该类必须有一个常量池条目(不计算反射,也不计算子类中的覆盖方法)。

有许多工具可以解析类文件并让您访问它。当然,反思要困难得多,而且通常无法确定。

编辑:这不包括类型描述符,它们只是Utf8_infos. 如果您还想查找用作类型的类,有两种方法。您可以浏览所有 Utf8 并包含所有看起来像描述符的内容(在极少数情况下可能会出现误报),或者您可以浏览类文件并找到所有类型描述符引用。

于 2014-03-05T14:54:45.993 回答