Programming/Android

[Android] minifyEnabled란?

코딩뽀시래기 2024. 6. 8. 21:40
728x90
android {
	
    ...
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
	
    ...
    
}

 

✅ 위 코드에서 minifyEnabled는 뭘까?

  • minifyEnabled는 코드의 난독화(최적화)를 설정하는 데에 사용된다.
  • 프로젝트를 생성하면 기본적으로 위 코드처럼 false 상태로, 난독화가 비활성화 되어있다.
  • proguardFiles에서 proguard-rules.pro 파일은 난독화 과정에서 제외할 코드와 추가적인 최적화 규칙을 정의한다.
  • 예) 특정 클래스나 메소드를 난독화에서 제외하려면 아래와 같이 설정 가능
# 특정 클래스와 메소드를 난독화에서 제외
-keep class com.example.myapp.MyClass {
    public <methods>;
}

# 애노테이션을 유지
-keepattributes *Annotation*

# 일반적인 ProGuard 규칙
-dontwarn android.support.**
-keep class android.support.** { *; }
-keep interface android.support.** { *; }

✅ 그렇다면 minifyEnabled를 true 상태, 활성화하는 이유는?

  • 코드가 난독화되고, 최적화 되어 release 빌드에서 더 작고 효율적인 APK를 생성하게 된다.
  • 보안, 성능 향상, 파일 크기 감소를 위해 사용된다.
  • 보안: 클래스, 메소드, 변수 이름을 이해하기 어렵게 바꿔서 소스 코드를 분석하기 어렵게 한다.
  • 성능 향상: 실행 속도를 향상시킨다. 불필요한 메소드 호출을 제거하고, 코드 경로를 단순화한다.
  • 파일 크기 감소: 사용되지 않는 코드를 제거하고, 코드 구조를 최적화하여 APK 파일의 크기를 줄인다. 다운로드 속도와 설치 시간을 줄여준다.

✅ 코드 난독화 시, 주의 사항

  • 난독화된 코드는 디버깅이 어렵다. 문제가 발생하면 원래 코드를 찾기 어려울 수 있다.
  • 위 문제 해결을 위해 ProGuard는 매핑 파일(mapping.txt)을 생성하는데, 이는 난독화된 이름과 원래 이름의 매핑을 제공해 디버깅을 도와준다.
  • 중요한 클래스, 메소드, 특히 리플렉션을 사용하는 경우, 난독화에서 제외해야 할 수도 있다. 리플렉션을 사용하는 코드가 난독화되면 예상치 못한 동작이 발생할 수 있다.
  • 난독화와 최적화 과정은 빌드 시간을 증가시킬 수 있다.
  • 때문에 debug 빌드 타입에서는 minifyEnabled를 false로 설정하고, release 빌드 타입에서만 true로 설정하는 것이 일반적이다.
728x90