[Android] 코드 난독화 활성화 방법 : optimization = true 만 해서는 해결되지 않는다.
build.gradle(:app) 파일에 아래와 같이 설정을 합니다.
as-is
buildTypes {
release {
optimization {
enable false
}
}
}
to-be
buildTypes {
release {
proguardFiles 'proguard-rules.pro'
optimization {
enable true
}
}
debug {
proguardFiles 'proguard-rules.pro'
optimization {
enable true
}
}
}
그리고 난 후 ‘proguard-rules.pro’ 파일에 난독화 대상에서 제외할 클래스 등을 추가합니다.
예시 >
# 2026-10-21: Room은 데이터베이스 이름에 _Impl을 붙여 구현 클래스를 찾고
# 인자 없는 생성자를 리플렉션으로 호출하므로 클래스 이름과 생성자를 보존합니다.
# 기존 Room 2.2.5의 클래스 보존 규칙만으로는 생성자 제거를 막지 못합니다.
-keep class * extends androidx.room.RoomDatabase {
public <init>();
}
Caused by: androidx.startup.StartupException: java.lang.RuntimeException: Failed to create an instance of androidx.work.impl.WorkDatabase
위 난독화 예시는 아래 오류 내용에 대한 대응처리입니다.
FATAL EXCEPTION: main
Process: com.jspsoft.omnidue, PID: 6177
java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider
at android.app.ActivityThread.installProvider(ActivityThread.java:9990)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:9467)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:9089)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(ActivityThread.java:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:3016)
at android.os.Handler.dispatchMessage(Handler.java:132)
at android.os.Looper.dispatchMessage(Looper.java:358)
at android.os.Looper.loopOnce(Looper.java:288)
at android.os.Looper.loop(Looper.java:392)
at android.app.ActivityThread.main(ActivityThread.java:10346)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:638)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:972)
Caused by: androidx.startup.StartupException: java.lang.RuntimeException: Failed to create an instance of androidx.work.impl.WorkDatabase
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2726)
at android.content.ContentProvider.attachInfo(ContentProvider.java:2695)
at android.app.ActivityThread.installProvider(ActivityThread.java:9987)
... 12 more
Caused by: java.lang.RuntimeException: Failed to create an instance of androidx.work.impl.WorkDatabase
at androidx.room.Room.getGeneratedImplementation(Room.java:100)
at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:952)
at androidx.work.impl.WorkDatabase.create(WorkDatabase.java:155)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:244)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:219)
at androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:198)
at androidx.work.WorkManager.initialize(WorkManager.java:210)
at androidx.work.WorkManagerInitializer.create(WorkManagerInitializer.java:39)
at androidx.work.WorkManagerInitializer.create(WorkManagerInitializer.java:30)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
... 18 more




