본문 바로가기
Mobile/Android

[Android] 코드 최적화 proguard-android-optimize 관련 이슈

by WooHey 2024. 5. 25.

proguard-android-optimize.txt

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), '[proguard-rules.pro](<http://proguard-rules.pro/>)'
  • “proguard-android-optimize.txt” 는 최적화 수준이 “proguard-android.txt” 에 비해서 더 공격적으로 최적화를 진행한다.
  • 따라서 난독화 도구에 의해 런타임에서 제네릭 정보를 제거하거나 변경할 수 있다.
  • 따라서, 타입 정보가 반드시 필요한 매서드의 경우에는 오류가 발생한다.
    • ex) 나는 com.google.gson.reflectTypeToken 과 같은 메서드를 사용했었다.

해결

1. 위에서 사용한 “proguard-android-optimize.txt” 대신 “proguard-android.txt” 을 사용

proguardFiles getDefaultProguardFile('proguard-android.txt'), '[proguard-rules.pro](<http://proguard-rules.pro/>)'

2. ProGuard/R8 규칙 추가

ProGuard 또는 R8 설정 파일에 Gson과 관련된 클래스를 난독화에서 제외하는 규칙을 추가

-keep class com.google.gson.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod

3. 특정 클래스 보존: DataCountryCode 클래스와 그 내부의 필드가 난독화 과정에서 변경되지 않도록 설정 파일에 해당 클래스를 난독화에서 제외하는 규칙을 추가

-keep class com.yourapp.DataCountryCode { *; }

4. 제네릭 타입 정보 보존

keepattributes Signature 규칙을 추가