我正在开发一个在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());
}
答案 0 :(得分:1)
在运行时发现使用特定注释注释的所有类通常需要类路径扫描。但是,没有精简的官方API。这是因为由于类加载系统的设计,它总是并且不可避免地是黑客攻击。简而言之,课程原则上可以按要求以完全无法控制和任意的方式创建。
尽管如此,通常类路径丛林绝不是恶毒的,也不会有陷阱,我们可以合理可靠地列出所有具有特定属性的类。有一个特定于Android的障碍需要克服,但它并不太糟糕。基本上,诀窍是在应用程序的.apk存档中列出classes.dex文件的内容,逐个加载它包含的类并反射检查所需的属性。您可以获得更多详细信息here(我的其他答案),this blog post包含相当完整的此技术说明(不是我的)。