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

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

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

有谁知道一个办法做到这一点? 有没有可用的图书馆?

  • 用ClassLoaderreplace一个预先加载的类?
  • Android:如何根据API的版本来编码?
  • Jelly Bean中的飞行模式
  • 从代理对象访问字段
  • Android / Java:使用reflection调用方法?
  • Android中的Proguard和reflection
  • 我可以重写一个隐藏(但公开)的方法,并调用其超级方法?
  • 如何访问Android源中的setPreferredNetworkType
  • 现有的dependency injection解决scheme使用reflection来处理注释,但仍然需要声明资源。 使用reflection来看这个DI的例子 。

    如果您使用Ant构build工件,则可以使用Bash或Java读取源目录的内容,并在每次构build时使用它自动重新生成类的完整层次结构。 但是,如果您依赖Eclipse IDE,这可能会变得棘手,因为列表可能会过时,直到您运行另一个Ant构build。 (注意:根据Pyscho,你可以通过改变项目configuration使Eclipse使用Ant,见注释)

    另一个选项可能是使用AssetManager处理AndroidManifest文件,但是您将被限制为在该文件中声明的资源。 编译后的类本身在classes.dex文件中被内联和优化,因此你不可能从中得到很多有用的信息。

    扫描文件系统作为非Android Java的大多数解决scheme在Android上不会有帮助。 这是一个(理论上的)解决scheme是特定于android的: http : //mindtherobot.com/blog/737/android-hacks-scan-android-classpath/

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

    我想你可能会在这里find答案https://stackoverflow.com/a/1457971/1199538有一个Java文件附加,所以你可以下载并尝试它

    以下是答案的简短摘录:

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

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

    你的类是在一个目录或JAR文件中,它有源文件信息(不是源代码文件,而只是源文件)。 据我所知,除了JVM类(这些类与JVM一起)之外,它几乎可以工作100%。

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