정상에서 IT를 외치다

[Android, Proguard] 안드로이드 프로가드 설정하기 2 본문

안드로이드

[Android, Proguard] 안드로이드 프로가드 설정하기 2

Black-Jin 2019. 4. 16. 14:36
반응형

안녕하세요. 블랙진입니다.


안드로이드 프로가드 설정하기 두번 째 포스팅 입니다. 지난 포스팅이 궁금하신 분은 이곳을 클릭해 주세요 :)


서론


안드로이드 개발을 하다보면 다양한 라이브러리를 사용하게 됩니다. 이에 맞춰 프로가드 또한 추가 설정을 해주어야 하는데요. 이번 포스팅에서는 가장 많이 사용하는 Retrofit2, Gson, Glide 3개의 라이브러리를 어떻게 설정 해야하는지 살펴보겠습니다.



1. Retrofit2


Sqare 에서 만든 네트워크 통신 라이브러리 입니다. 프로가드를 설정해 주지 않으면 앱에서 동작을  하지 않게 되는데요. 친절하게도 Retrofit 홈페이지에 Proguad 설정하는 법이 나와있습니다.


홈페이지 하단부로 내려가면 아래와 같은 글이 있습니다. this file 이 보고 싶으신 분을 클릭!




Retrofit 프로가드 설정 코드

# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod

# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}

# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**

# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit

# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.KotlinExtensions


<사용한 Proguard 옵션>


keepattributes : 소스파일, 라인정보 유지


- keepclassmembers :  특정 클래스 맴버 원상태 유지


- dontwarn : 경고 무시




RxJava2 를 사용한 Retrofit 통신


RxJava2 를 사용한 Retroifit 통신이 궁금하신 분은 링크를 확인해 주세요.


위 설정은 Retroifit 를 사용하기 위한 설정이고 RxJava2 를 사용해 통신 중이라면 추가로 설정이 필요합니다. 통신할 때 사용하는 모델의 난독화를 없애 주어야 합니다.

# ALSO REMEMBER KEEPING YOUR MODEL CLASSES
# Rx 자바를 추가로 사용하기 때문에 추가 설정을 해주어야 합니다.
-keep class {Your Package}.api.model.** { *; }

저는 api/model 패키지 안에 Retrofit 통신을 할 때사용하는 모델들을 위치했기 때문에 위와 같이 작성했습니다.


<사용한 Proguard 옵션>


keep class : 난독화가 필요 없을 때




2. Gson


JSON의 자바 오브젝트의 직렬화, 역직렬화를 해주는 오픈 소스 라이브러리 입니다.

Gson gitbub 에 난독화 코드가 공개되어 있습니다.

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

##---------------End: proguard configuration for Gson ----------



3. Glide


이미지 로딩 라이브러리 입니다. Glide github 에서 확인하실 수 있습니다.

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}



4. Proguard Docs


Proguard Docs 가 궁금하신 분은 본인 PC의 android-sdk가 설치된 폴더에서 확인하실 수 있습니다.  

경로 > Android/sdk/tools/proguard/docs 



프로가드 doc/introduction 의 화면을 캡쳐한 것입니다. 왼쪽에 보시면 Usage 에서 다양한 옵션을 볼 수 있습니다!!




정리


프로가드를 적용할 때에는 먼저 사용중인 라이브러리가 잘 작동 되는지 하나 하나 확인해 봐야 합니다. 라이브러리 자체에 프로가드 설정이 없다면 프로젝트가 난독화 되면서 제대로 동작하지 않을 수 있기 때문입니다. 위에서 보시는 바와 같이 라이브러리 문서를 보면 프로가드를 설정하는데 많은 도움을 받으실 수 있습니다.



프로가드 함수에 대해 조금더 자세히 보고싶다면 -> 프로가드 설정하기 3



<참고자료>


Retrofit2 _ RxJava proguard 설정

Proguard Rules 정리


반응형
Comments