Obfuscating and Shrinking your code
프로가드를 통해서 안드로이드 프로젝트의 난독화와 최적화를 할 수 있다.
obfuscate: 난독화
Shrink : 수축, 축소
optimize : 최적화
Android Gradle 플러그인 3.4.0 이상을 사용하여 프로젝트를 빌드하는 경우 플러그인은 더 이상 ProGuard를 사용하여 컴파일 시간 코드 최적화 작업을 하지 않습니다. 대신 플러그인은 R8 컴파일러를 이용하여 다음의 컴파일 시간 작업을 처리합니다.
proguard 설정 방법
android {
buildTypes {
debug {
mifinyEnalbled false
}
release {
// Enables code shrinking, obfuscation, and optimization for only
// your project's release build type.
minifyEnabled true
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
shrinkResources true
// Includes the default ProGuard rules files that are packaged with
// the Android Gradle plugin. To learn more, go to the section about
// R8 configuration files.
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
...
}
minifyEnabled : code 의 최적화, 난독화, 축소
shrinkResources : 리소스에 축소
porguard-android-optimize.txt , proguard-android.txt
-> 안드로이드 SDK 홈(/Library/Android/sdk/tools/proguard)에 포함되어있다.
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
이런식으로 default 와 사용자 옵션을 정의해서 쓴다.
프로가드 옵션
-
dontusemixedcaseclassnames
대소문자가 혼합된 클래스명을 허용하지 않음
난독화 해서 나온 파일명을 소문자로만 쓰겠다
-
verbose
진행상황을 표시해준다.
-
dontshrink
사용하지 않는 메소드를 유지하라
라이브러리를 개발한다면 이 옵션을 꼭 추가해야 한다.
-
dontskipnonpubliclibraryclasses
Specifies not to ignore non-public library classes
public library class 가 아닌 것을 무시하지 않음
4.5부터 기본 옵션임
→ 라이브러리내의 non-public 클래스를 난독화 처리한다.
-
renamesourcefileattribute sourcefile
소스 파일 변수 명 바꾸는 옵션.
-
keepattributes sourcefile, linenumbertable
소스 파일의 라인을 섞지 않는 옵션.
-
keepattributes annotation
어노테이션 바꾸지 않는 옵션.
-
keepattributes signature
제너릭 타입 정보 보존
-
keepattributes Exceptions
Retain declared checked exceptions for use by a Proxy instance.
-
dontwarn
패키지를 지정해서 경고 무시
-
ignorewarnings
경고 무시
-
dontoptimize
최적화 하지 않기
난독화 예외 처리 방법
-
특정 클래스를 난독화 하지 않는 방법
-keep class com.babosamo.ClassA
-
특정 패키지를 난독화 하지 않는 방법
-keep class com.babosamo.pacageA.** {*;}
-
특정 class 를 상속받은 클래스를 낙독화 하지 않느 방법
-keep class * implements com.babosamo.ClassA
추가 사항
gson 이나 retofit 처럼 reflection 을 기반으로 동작하는 라이브러리 추가 시 가이드 문서에 프로가드 옵션이 있는지 확인해야한다.
참고 :