Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Android项目中的包中检索类列表_Java_Android_Reflection - Fatal编程技术网

Java 从Android项目中的包中检索类列表

Java 从Android项目中的包中检索类列表,java,android,reflection,Java,Android,Reflection,我知道使用反射在一个包中获取所有类并不容易,但我想知道是否有人知道一个好的解决方案/解决方案,特别是针对Android项目 给定一个包,我需要能够从中检索所有类,并使用反射处理其中的注释 有人知道这样做的方法吗?有可用的库吗?现有的依赖项注入解决方案使用反射来处理注释,但仍然需要声明资源。看 如果您使用Ant构建工件,那么可以使用Bash或Java读取源目录的内容,并使用它在每次构建期间自动重新生成完整的类层次结构。但是,如果您严重依赖EclipseIDE,这可能会使事情变得棘手,因为在您运行另

我知道使用反射在一个包中获取所有类并不容易,但我想知道是否有人知道一个好的解决方案/解决方案,特别是针对Android项目

给定一个包,我需要能够从中检索所有类,并使用反射处理其中的注释


有人知道这样做的方法吗?有可用的库吗?

现有的依赖项注入解决方案使用反射来处理注释,但仍然需要声明资源。看

如果您使用Ant构建工件,那么可以使用Bash或Java读取源目录的内容,并使用它在每次构建期间自动重新生成完整的类层次结构。但是,如果您严重依赖EclipseIDE,这可能会使事情变得棘手,因为在您运行另一个Ant构建之前,该列表可能已经过时。(注意:根据Pyscho,您可以通过更改项目配置使Eclipse使用Ant,请参见注释)


另一个选项可能是使用AssetManager处理AndroidManifest文件,但您将受限于该文件中声明的资源。编译的类本身在classes.dex文件中进行了排列和优化,因此您不太可能从中获得很多有用的信息。

我想您可能会在这里找到答案 附加了一个java文件,您可以下载并试用

下面是答案的简短片段:

此方法只能在以下情况下使用:

您有一个类,它与您要发现的包在同一个包中,这个类称为 种子班。例如,如果要列出“java.io”中的所有类,则种子类可能是java.io.File

您的类位于目录或JAR文件中,它包含源文件信息(不是源代码文件,只是源文件)。据我所知,除了JVM类(这些类随JVM一起提供)之外,它几乎100%都能工作

您的程序必须具有访问这些类的ProtectionDomain的权限。如果您的程序是本地加载的,那么应该没有问题


像大多数非Android Java解决方案那样扫描文件系统对Android没有帮助。以下是一个针对android的(理论)解决方案:


然而,它仍然是一种黑客行为,因为不幸的是Java并不直接支持这种行为

在JVM字节码转换为Dalvik字节码之前,您可以在compiletime对Android进行类路径扫描,例如使用ClassGraph库(我是作者):


在Java中,这是可能的(请参阅或)。但我不知道它是否能在Android上运行。我只想补充一下关于Eclipse的话,你可以让它在通常的构建过程中包含定制的Ant任务:在项目的属性中,转到构建器,并使用New添加Ant构建器。