Search
📱

난독화

날짜
2024/08/20
파트
안드로이드
서기
블로그 업로드 여부

왜 난독화를 해야할까?

보안 강화앱 크기 최적화

보안 강화

소스 코드 도용이나 앱의 핵킹 시도를 어렵게 할 수 있습니다.
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
복사