— Android — 1 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 true6 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 (located10 // 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 : 대소문자가 혼합된 클래스명을 허용하지 않음