2013-07-23 31 views
0

我正在开发一个在Android中使用的API。我想使用反射来访问android活动类中实现的注释。我需要从我的API中反映出来。有办法做到这一点?从Android活动类别反映注释

我想将上下文传递给API,但我可以获取注释所在的活动类。

该注释被称为操作,它是如下:

@Action(
    name = "test", 
    description = "this is just a test", 
    inputs = {"no input"}, 
    output = {"no output"}, 
    controlURL = "/api/v1/" 
) public void testAction(){ 
    /* 
    * Implements here the Action! 
    */ 
} 

我所用的方法,以反映它:

private static void getAction() { 
    if (D) Log.d(TAG, "getAction"); 

    Class classWithAction = AppContext.getClass(); 

    Annotation[] aAnnotations = classWithAction.getDeclaredAnnotations(); 
    for(Annotation a : aAnnotations) 
     Log.d(TAG, a.toString()); 
} 
+0

那么你想达到什么?你想得到所有有这个注解的类,或者你想知道某个类是否拥有它? – Desert

+0

@ user1873880感谢您的回复。我想用这个注解来获得所有的类。 – ravalboy

回答

1

发现与在运行时特别注解的所有类要求,一般来说,类路径扫描。尽管如此,没有简化的官方API。这是因为它由于类加载系统的设计而始终是不可避免的黑客攻击。总而言之,原则上讲,课堂可以根据需要以完全不可控和任意的方式创建。尽管如此,通常类路径丛林并不意味着恶性和恶化,我们可以合理可靠地列出所有具有特定属性的类。有一个特定于Android的障碍需要克服,但这并不算太坏。基本上,诀窍是列出应用程序的.apk文件中的classes.dex文件的内容,逐个加载它所包含的类并反思性地检查所需的属性。你可以得到更多的细节here(我的其他答案),和this blog post包含这种技术的相当完整的例证(这不是我的)。