안드로이드 코딩시 도움이 되는 대표적 오픈소스 프레임워크/라이브러리인 RoboGuice와 AndroidAnnotations에 대한 비교 메모입니다.


1. RoboGuice (RG)

- Injection 대상 : View, Resource, 시스템서비스, POJO 등

- 향상된 유틸리티 클래스 제공 : RoboAsyncTask, Ln 등

- 액티비티 생명주기 Event 전달을 통한 모듈화 메커니즘 제공 : 액티비티에 대한 강한 커플링을 제거.

- Activity는 RoboActivity를 상속받아야 함

- Activity가 아닌 클래스에서도 안드로이드 컴포넌트 inject 가능

- 구글 Guice에 의존 : 강력하고 충실한 inject 기능 제공

- 런타임시에 inject 및 어노테이션을 처리하므로 성능하락 존재

- 용량 큼 : 590KB



2. AndroidAnnotations (AA)

- Injection 대상 : View, Resource, 시스템서비스, POJO(제한적) 등

- 다양한 유틸리티성 어노테이션 제공. inject외에 다양한 작업을 어노테이션을 통해 처리

 : 쓰레드작업(UiThread, Background,..), 이벤트처리(Click, ItemClick,...), REST통신 등

- 컴파일 타임에 inject 및 어노테이션 처리한 자식클래스를 생성 : 런타임 성능하락 없음

- 특정 Activity 상속 필요없음

- java annotation processing 설정 필요

- 새 액티비티 클래스 작성후 Android Manifest.xml 수정이 필요 => 액티비티 클래스명 끝에 언더바를 추가해줘야함

 : 예를들어 ".xxx.MyActivity" -> ".xxx.MyActivity_" 

- 명시적으로 액티비티 사용시에 언더바 붙은 액티비티를 사용해야 함

- 용량 작음 : 53KB



* 참고자료

http://blog.springsource.org/2011/08/26/clean-code-with-android/

http://blog.softwaregeeks.org/archives/647

Posted by 에코지오
,

안드로이드 앱 프로젝트가 AspectJ 클래스를 포함하고 있는 안드로이드 라이브러리 프로젝트를 참조하는 경우에, 라이브러리 프로젝트의 aspect는 예상과는 달리 앱 프로젝트에 적용되지 않습니다. 

그러니까 앱 프로젝트의 소스 컴파일시에 라이브러리 프로젝트의 aspect들과 함께 위빙되어 컴파일이 돼야하는데 그렇지 않다는 겁니다.

아래의 방법으로 해결할 수 있습니다.


1. Aspect Path 설정

앱 프로젝트 속성창 > AspectJ Build > Aspect Path 탭에서 "Add Project"를 통해 라이브러리 프로젝트를 추가해줍니다.

(아래 그림에서는 mobile-framework-android 프로젝트가 라이브러리 프로젝트입니다)




이렇게 하면 AspectJ 컴파일러가 앱 프로젝트 빌드시에 라이브러리 프로젝트에 포함된 aspect를 포함하여 함께 위빙시킵니다.

(라이브러리 프로젝트의 bin/xxx.jar 파일을 추가해도 되며, jar파일이 'Reference Libraries' 변수로 자동 추가됨)


2. Ant 빌드파일 설정

custom_rules.xml의 iajc 타스크에 아래 설정을 추가합니다.


      <aspectPath>

        <!-- 라이브러리 프로젝트에 속한 애스펙트도 적용 -->

        <path refid="project.libraries.jars" />

      </aspectPath>



Posted by 에코지오
,

최근에 Android SDK 버전을 r17로 업그레이드하고 나니 바뀐 점이 꽤 많더군요. 


1. 안드로이드 라이브러리 프로젝트

- bin 디렉토리에 R.class를 제외한 컴파일된 클래스를 포함하는 .jar 파일이 만들어짐.
  프로젝트이름이 my-library이면 my-library.jar 파일이 생성됨.


2. 안드로이드 앱 프로젝트

- libs 폴더의 모든 jar 파일이 'Android Dependencies' 라이브러리 변수에 자동으로 포함되어 빌드패스에 추가됨

- 라이브러리 프로젝트를 참조 라이브러리로 추가할 경우 라이브러리 프로젝트의 빌드 결과물 jar 파일이
  역시 'Android Dependencies' 라이브러리 변수에 자동으로 포함됨. 또한 라이브러리 프로젝트의 소스가 소스패스에 자동으로 추가됨.



* ADT를 통한 빌드시 자꾸 Dalvik 포맷 에러 발생하는 이슈 해결방법

- Conversion to Dalvik format failed with error 에러가 발생함

=> 앱 프로젝트에 자동으로 추가된 라이브러리 프로젝트의 소스폴더를 소스패스에서 제거해줌


* jar 파일과 소스 연결 이슈 해결방법

- 'Android Dependencies'에 포함된 jar 파일에 대해서 소스를 따로 attach할 수가 없음

=> jar 파일안에 .java 소스를 포함시키면 됨



3. ProGuard 설정

- 프로가드를 사용하려면 project.properties에서 아래 라인을 주석해제함.


proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt


- 설정파일이 proguard.cfg에서 proguard-project.txt로 변경되었으며, proguard-project.txt에는 프로젝트 specific한 내용만 작성.


4. Ant 빌드
- 여러가지 바뀜. 자세한 내용은 Android 사이트 참고.. -.-;;

* 참고하세요.

Posted by 에코지오
,