왜 난독화를 해야할까?
보안 강화와 앱 크기 최적화
보안 강화
•
소스 코드 도용이나 앱의 핵킹 시도를 어렵게 할 수 있습니다.
•
Kotlin 코드를 난독화하여 클래스, 메서드, 변수 이름을 짧고 의미 없는 이름으로 변환
앱 크기 최적화
•
코드 최적화: ProGuard는 난독화뿐만 아니라 사용되지 않는 코드를 제거(Dead Code Elimination)하여 앱의 크기를 줄여줍니다. 이를 통해 APK 파일의 크기를 최소화할 수 있으며, 이는 다운로드 시간과 설치 시간을 줄이는 데 도움이 됩니다.
•
메모리 사용 감소: 불필요한 클래스, 메서드, 변수 등이 제거되어 앱의 메모리 사용이 줄어들고, 성능이 향상될 수 있습니다.
Proguard를 사용한 난독화
shrinkResources
불필요한 리소스 제거. 파일 사이즈 감소.
minifiyEnabled = true
클래스 명과 함수명들이 모두 a,b,c등으로 바뀌게 된다.
예외 대상 설정하기
최종 Proguard Rule
난독화가 되면 안되는 클래스들은 proguard에 정의해서 난독화 방지가 가능하다.
# retrofit
-keep class com.squareup.retrofit2.** { *; }
-keep class retrofit2.** { *; }
-keepclassmembers,allowobfuscation class * {
@retrofit2.http.* <methods>;
}
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.google.gson.** { *; }
-keep class kotlinx.serialization.** { *; }
-keep class com.zzang.chongdae.data.remote.dto.* { <fields>; }
# room
-keep class androidx.room.** { *; }
-keep interface androidx.room.** { *; }
-keepclassmembers class * {
@androidx.room.* <fields>;
}
# glide
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public class * extends com.bumptech.glide.module.LibraryGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keep class * extends com.bumptech.glide.GeneratedAppGlideModule { *; }
# firebase
-keep class com.google.firebase.** { *; }
-keep class com.google.android.gms.** { *; }
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
# kakao login
-keep class com.kakao.sdk.**.model.* { <fields>; }
# R8 full mode strips generic signatures from return types if not kept.
-if interface * { @retrofit2.http.* public *** *(...); }
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
# paging
-keep class androidx.paging.** { *; }
# datastore
-keep class androidx.datastore.** { *; }
-keepclassmembers class androidx.datastore.** { *; }
# mock
-keep class io.mockk.** { *; }
-dontwarn okhttp3.mockwebserver.**
# webview
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keepclassmembers class com.zzang.chongdae.presentation.view.address.JavascriptInterface{
public *;
}
-keep public class com.zzang.chongdae.presentation.view.address.JavascriptInterface
-keepclassmembers class kotlinx.coroutines.** {
*;
}
-dontwarn org.bouncycastle.jsse.**
-dontwarn org.conscrypt.*
-dontwarn org.openjsse.**
-dontwarn javax.swing.**
-dontwarn java.awt.**
-dontwarn java.lang.instrument.**
-dontwarn java.lang.management.**
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry
-dontwarn reactor.blockhound.**
JavaScript
복사