Skip to content
coooldoggy.dev

ProGuard 정리

Android1 min read

https://developer.android.com/studio/build/shrink-code?hl=ko https://www.guardsquare.com/en/products/proguard/manual/usage

다음의 경로에 파일을 만든다

1<module-dir>/proguard-rules.pro

build.gradle 에 다음을 추가해준다.

1android {
2 ...
3 buildTypes {
4 release {
5 minifyEnabled true
6 proguardFiles getDefaultProguardFile(
7 'proguard-android-optimize.txt'),
8 // List additional ProGuard rules for the given build type here. By default,
9 // Android Studio creates and includes an empty rules file for you (located
10 // at the root directory of each module).
11 'proguard-rules.pro'
12 }
13 }
14 flavorDimensions "version"
15 productFlavors {
16 flavor1 {
17 ...
18 }
19 flavor2 {
20 proguardFile 'flavor2-rules.pro'
21 }
22 }
23 }

JNI method를 호출하는 경우

런타임 리플랙션을 사용하여 코드를 찾는 경우

Keep을 사용하여 R8이 특정 코드를 유지하도록함.

1-keep public class MyClass

Option

1verbose : 로그 사용
2keepattributes *Annotation* : 어노테이션 보존
3SourceFile : 에러시 소스 파일명 표시
4LineNumberTable : 에러시 라인수 표시
5Signature : Generic 타입 정보 보존
6-keep interface ~~~ : 명시된 하위 인터페이스를 난독화하지 않음
7-keep class ~~~ : 명시된 클래스 또는 메소드를 난독화하지 않음
8-keep class com.test.** {
9 public *;
10} // com.test 하위 클래스 중 public 메소드만 난독화하지 않음
11-keep class com.test.** {*;} // 전체 난독화하지 않음
12-keepclassmembers (class/interface/enum) ~~~ : Serializable 인터페이스를 구현하는 필드와 클래스를 난독화에서 제외
13-keepclassmembers enum com.test.** {*;}
14
15dontoptimize : 최적화 안함
16optimizationpasses n : 최적화 통과 수를 명시. 기본 1 (최적화를 하는 경우에만 적용 가능)
17dontshrink : 사용하지 않는 메소드 유지
18dontwarn com.test.** : 해당 패키지의 Warning을 무시
19dontpreverify : 사전 검증기능을 사용하지 않음
20dontusemixedcaseclassnames : 대소문자가 혼합된 클래스명을 허용하지 않음