反映android活动类的注释

时间:2013-07-23 11:50:00

标签: java android reflection annotations android-activity

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

我正在尝试将上下文传递给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());
 }

1 个答案:

答案 0 :(得分:1)

在运行时发现使用特定注释注释的所有类通常需要类路径扫描。但是,没有精简的官方API。这是因为由于类加载系统的设计,它总是并且不可避免地是黑客攻击。简而言之,课程原则上可以按要求以完全无法控制和任意的方式创建。

尽管如此,通常类路径丛林绝不是恶毒的,也不会有陷阱,我们可以合理可靠地列出所有具有特定属性的类。有一个特定于Android的障碍需要克服,但它并不太糟糕。基本上,诀窍是在应用程序的.apk存档中列出classes.dex文件的内容,逐个加载它包含的类并反射检查所需的属性。您可以获得更多详细信息here(我的其他答案),this blog post包含相当完整的此技术说明(不是我的)。