RoboGuice 2.x 사용 환경에서 ProGuard 설정에 추가해줄 내용입니다.

(참고 : http://code.google.com/p/roboguice/wiki/ProGuard)


# res/values/roboguice.xml 파일에 풀네임이 지정되는 클래스 보존

-keep class * extends com.google.inject.AbstractModule


# 참조할 수 없다는 경고 제거(can't find referenced method)

-dontwarn roboguice.**


# roboguice,guice 클래스 및 멤버 보존(필요에 따라 좀더 세밀하게 조정할 것)

-keep class roboguice.event.EventThread { *; }

#-keep public class roboguice.**

#-keep public class com.google.inject.**


# @Inject 붙은 생성자/필드/메소드 및 public 기본생성자 보존

-keepclassmembers class * {

    @com.google.inject.Inject <init>(...);

    @com.google.inject.Inject *;

    public <init>();

}


# There's no way to keep all @Observes methods, so use the On*Event convention to identify event handlers

-keepclassmembers class * {

    void *(**On*Event);

}

Posted by 에코지오
,

아래는 안드로이드 개발시 AspectJ 라이브러리를 사용하는 경우 기본적인 ProGuard 설정에 추가해주어야 할 내용입니다.

# aspect 클래스 및 aspect가 적용되는 클래스에서 AspectJ 라이브러리를 참조할 수 없다는 경고 제거
# (can't find referenced class)
-dontwarn org.aspectj.**

# AspectJ 클래스 변경금지
-keep class org.aspectj.**

# Aspect 클래스 보존
-keep @org.aspectj.lang.annotation.Aspect class * { *; }
-keepclasseswithmembers class * {
  public static *** aspectOf();
}

# 패키지 변경 금지(주석해제시 런타임에 java.lang.NoSuchMethodError 에러 발생)
#-repackageclasses ''
#-allowaccessmodification

# around 어드바이스가 적용되는 target 클래스에서 around 어드바이스 메소드를
# 참조할 수 없다는 경고 제거(can't find referenced method) : aspect 클래스를 지정
-dontwarn my.app.aop.**
(또는 -dontwarn my.app.**.*Aspect 식으로 설정)


Posted by 에코지오
,

저같은 경우 안드로이드 앱 개발시 JSON 데이터 처리를 위해 주로 Codehaus의 jackson json 라이브러리 (jackson-core-asl-x.x.jar, jackson-mapper-asl-x.x.jar)를 사용합니다. 

이렇게 앱에서 Jackson JSON 라이브러리를 사용하는 경우 ProGuard 설정을 어떻게 해줘야하는지 제대로 정리된 자료가 별로 없더군요.

그동안은 릴리스 빌드시에 잘못된 proguard 설정때문에 발생하는 에러나, 앱 실행시에 잘못된 소스난독화로 인한 런타임 에러를 만날때마다

임시방편으로 설정의 의미도 모른채 설정을 조금씩 고쳐가면서 소뒷걸음질하다 운좋게 에러를 해결하곤 했습니다. 에러가 없게 설정했다고 해도 왜 그런 설정이 필요한지 자세한 이유를 알지는 못했죠.

미루고 미루다 이제야 ProGuard 홈페이지 문서 Gson에서 사용하는 proguard 설정을 참고하여 아래와 같이 정리해보았습니다.

실제로 제가 개인적으로 개발중인 앱에 적용해서 빌드하고 테스트해보니 이상이 없었습니다.

# 어노테이션 보존

-keepattributes *Annotation*,EnclosingMethod


# 제너릭 타입 정보 보존

-keepattributes Signature


# Jackson이 참조하는 다른 라이브러리(joda-time 등) 없다는 경고 제거

-dontwarn org.codehaus.jackson.**


# java.lang.NoSuchFieldError: PUBLIC_ONLY 에러 제거

-keepnames class org.codehaus.jackson.** { *; }


# Jackson에 의해 JSON데이터와 매핑(바인딩)되는 모델(POJO) 클래스 보존

-keep public class my.app.model.** { *; }


# 모델 클래스외에 getter/setter 보존이 필요한 경우

#-keep public class my.app.** {

#  public void set*(***);

#  public *** get();

#}



Posted by 에코지오
,