gpt4 book ai didi

java - 反射(reflect) Android Activity 类的注释

转载 作者:行者123 更新时间:2023-12-01 14:19:01 25 4
gpt4 key购买 nike

我正在开发一个在 Android 中使用的 API。我想使用反射来访问在 android Activity 类中实现的注释。我需要从我的 API 中反射(reflect)它。有办法吗?

我正在尝试将上下文传递给 API,但我可以获得注释所在的 Activity 类。

该注解名为action,如下:

@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!
*/
}

我用来反射(reflect)的方法:

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());
}

最佳答案

在运行时发现所有带有特定注释的类通常需要类路径扫描。不过,并没有简化的官方 API 来执行此操作。这是因为,由于类加载系统的设计,它总是不可避免地是一种黑客行为。简而言之,类原则上可以按需创建,完全不可控且任意。

尽管如此,类路径丛林通常并不那么邪恶且充满陷阱,我们可以相当可靠地列出所有具有特定属性的类。有一个 Android 特有的障碍需要克服,但这也不算太糟糕。基本上,技巧是在应用程序的 .apk 存档中列出classes.dex 文件的内容,一一加载它包含的类,并反射(reflection)性地检查所需的属性。您可以获取更多详情here (我的另一个答案)和this blog post包含该技术的相当完整的说明(不是我的)。

关于java - 反射(reflect) Android Activity 类的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com