2013-07-23 62 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包含這種技術的相當完整的例證(這不是我的)。