일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자취필수템
- 한달브런치북만들기
- 1일1커밋
- 안드로이드
- 좌식테이블
- 목적중심리더십
- 슬기로운 온라인 게임
- 프래그먼트
- 소프시스
- 면접
- 한달독서
- 어떻게 나답게 살 것인가
- 베드트레이
- 소프시스 밤부 좌식 엑슬 테이블
- 캐치마인드
- 목적 중심 리더십
- 한달어스
- 북한살둘레길
- T자형인재
- 아비투스
- 지지않는다는말
- 베드테이블
- 재택근무
- 브런치작가되기
- 리얼하다
- 한단어의힘
- 테트리스
- 함수형 프로그래밍
- 커스텀린트
- 끝말잇기
- Today
- Total
정상에서 IT를 외치다
[Android, Proguard] 안드로이드 프로가드 설정하기 2 본문
안녕하세요. 블랙진입니다.
안드로이드 프로가드 설정하기 두번 째 포스팅 입니다. 지난 포스팅이 궁금하신 분은 이곳을 클릭해 주세요 :)
서론
안드로이드 개발을 하다보면 다양한 라이브러리를 사용하게 됩니다. 이에 맞춰 프로가드 또한 추가 설정을 해주어야 하는데요. 이번 포스팅에서는 가장 많이 사용하는 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 설정
'안드로이드' 카테고리의 다른 글
[Android, Drawing View] 안드로이드에서 뷰가 그려지는 과정 (2) | 2019.04.19 |
---|---|
[Android, MVP] 리뷰 받은 MVP 예제 with Dagger (0) | 2019.04.17 |
[Android, Release Compile] 릴리즈 버전으로 컴파일 하기 (2) | 2019.04.16 |
[Android, 단축키] 내가 자주 사용하는 단축키 정리 for MAC (8) | 2019.04.11 |
[Android, IDE] 안드로이드 코딩속도를 높여주는 템플릿 (2) | 2019.04.11 |