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
'Programming > Android' 카테고리의 다른 글
[Android/Kotlin] Image URL을 Bitmap으로 변환해서 보여주는 방법 (0) | 2024.06.28 |
---|---|
[Android] gradle > buildType에서 release와 debug 버전을 분리하는 경우 (0) | 2024.06.07 |
[Android] DI(종속성 주입) Hilt 공부 (0) | 2024.05.25 |
[Android] Toast 나타나는 위치 변경 / setGravity() / API30 이상 (0) | 2024.05.09 |
[Android] 안드로이드 프로젝트 minSDK 버전 (1) | 2024.04.29 |