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

时间:2012-02-13 05:13:34

标签: java android reflection

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

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

有谁知道这样做的方法?有没有可用的图书馆?

4 个答案:

答案 0 :(得分:3)

扫描文件系统,因为非Android Java的大多数解决方案都无法在Android上提供帮助。这是一个特定于android的(理论)解决方案:http://mindtherobot.com/blog/737/android-hacks-scan-android-classpath/

然而,它仍然是一个黑客,因为Java不幸不直接支持这一点。

答案 1 :(得分:0)

现有依赖注入解决方案使用反射来处理注释,但仍需要声明资源。请参阅this example of DI using reflection

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

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

答案 2 :(得分:0)

我想你可能会在这里找到答案https://stackoverflow.com/a/1457971/1199538 附加了一个java文件,您可以下载并试用它

以下答案中的简短片段:

  

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

     

你有一个类想要发现在同一个包中,这个类叫做a   SeedClass。例如,如果要列出'java.io'中的所有类,则种子类可能是java.io.File。

     

您的类位于目录或JAR文件中,它具有源文件信息(不是源代码文件,而只是源文件)。据我所知,除了JVM类(这些类附带JVM)之外,它几乎100%工作。

     

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

答案 3 :(得分:0)

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

https://github.com/classgraph/classgraph/wiki/Build-Time-Scanning