2013-07-23 2 views
0

Android에서 사용할 API를 개발 중입니다. 안드로이드 액티비티 클래스에서 구현 된 어노테이션에 리플렉션을 사용하여 액세스하고자합니다. 내 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

그래서 무엇을 달성하려고합니까? 이 주석이있는 모든 클래스를 가져오고 싶거나 특정 클래스에이 주석이 있는지 알고 싶습니까? – Desert

+0

@ user1873880 답장을 보내 주셔서 감사합니다. 이 주석으로 모든 클래스를 가져오고 싶습니다. – ravalboy

답변

1

가 일반적으로 필요 classpath 스캐닝. 하지만이를 수행하기위한 간소화되고 공식적인 API는 없습니다. 이는 클래스 로딩 시스템의 설계로 인해 언제나 필연적으로 해킹이기 때문입니다. 요컨대, 수업은 원칙적으로 완전히 통제 할 수없고 임의적 인 방식으로 요구에 따라 만들어 질 수 있습니다.

그러나 classpath 정글은 결코 함부로 침입하여 함정에 빠져 버릴 수는 없으며 특정 속성을 가진 모든 클래스를 합리적으로 신뢰성있게 나열 할 수 있습니다. 극복해야 할 한 가지 안드로이드 관련 장애물이 있지만 너무 나쁘지는 않습니다. 기본적으로, 속임수는 앱의 .apk 아카이브에있는 classes.dex 파일의 내용을 나열하고, 하나씩 포함하는 클래스를로드하고 원하는 속성을 반사적으로 확인하는 것입니다. here (다른 답변) 및 this blog post에이 기술에 대한 완전한 그림이 포함되어 있습니다 (내 것이 아닙니다).

관련 문제