2013-01-11 4 views
2

나는 .java 소스 파일을 수정하는 aspect 지향 프레임 워크를 찾으려고했다. 나는 어리석은 생각 일 수 있다는 것을 알고있다 ... 그러나 내가 원하는 것은 정확한 코드가 .class에 붙여 넣어 진 것을 이해하는 것이다.소스를 수정하는 것을 허용하는 자바 (안드로이드)를위한 aspect oriented framework 찾기

기본적으로 나는 거대한 안드로이드 프로젝트를위한 로깅과 다른 측면을 적용하려고합니다. AspectJ를 가지고 놀고 있었지만 문제는 이미 메소드 선언 한계에 도달했고 AspectJ를 .apk로 채우기 만하면된다. 그러나 AspectJ 라이브러리가 없으면 클래스 예외 예외가 발생하지 않는다. (원인 : java.lang.NoClassDefFoundError : org.aspectj.runtime.reflect.Factory)

답변

1

소스 코드에서 작동하는 aspectJ와 동일한 기능을 찾을 수 없을 것이다.

원하는 것으로 보이는 것은 애스펙트 삽입을 복제 할 수있는 소스에서 소스로의 프로그램 변환 도구입니다 (또는 로깅을 충분히 수행 할 수 있음).

사실상 변환 시스템은 명명 된 Java 엔티티에서 변환을 수행하기 위해 Java 엔티티가 명명되는 방법을 이해해야합니다.

애스펙트를 적용하는 변환을 작성해야합니다. 일부 AspectJ aspect는 제어 흐름을 포함하는 정교한 작업을하기 때문에, 작성하기 힘든 변환을 발견 할 수있다. 로깅은 비교적 쉽습니다.

변형 도구를 실행하여 aspect를 소스 코드베이스에 적용하여 aspect 화 된 소스 코드베이스를 생성합니다. 결과 코드 기반은 컴파일되어 Android 컨텍스트에 전달됩니다. 변형 시스템 자체에는 초과 수하물이 포함되지 않습니다. AspectJ가 지원 라이브러리 "runtime.reflect.Factory"에 대한 필요성을 알았던 것처럼 추가 라이브러리에 호출을 삽입하기 위해 애스펙트 삽입의 일부로 필요할 수도 있지만 적어도 코드가 무엇인지는 알 것이다. 당신은 inspectable 소스 코드를 가지게 될 것이다. 사실 이러한 호출은 변환 규칙 자체에서 직접 볼 수 있기 때문에 알 수 있습니다.

내가 알고있는 변환 도구 중 DMS 소프트웨어 리엔지니어링 도구 키트 만 Java를 명명 수준까지 인식하고 제어 흐름을 처리합니다. DMS는 명시 적 변환 규칙의 형태로 인코딩 된 측면을 적용 할 수 있습니다.

+0

사실 나는 다른 안드로이드 프로젝트의 측면을 적용 할 수 있으며 문제는이 특정 프로젝트의 메소드 제한 사항에 불과합니다 ... 그래서 가볍고 자유롭고 오픈 소스 인 것, 특히 쉽게 통합 될 수있는 것에 대해 궁금합니다. mvn .. 일부 라이브러리 또는 mvn 플러그인. 그 도구가 적용될 것인지 확신하지 못하면 더 많은 것을 조사하려고합니다. 감사. – MrJBee

+0

소스 코드를 안정적으로 수정할 수있는 "가벼운"것을 찾을 수 없습니다. –