Android프로그래밍

[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

Hi, I’m 관리자