Android Proguard에 대해 알아보자
Android Proguard가 필요한 이유
1. 코드 난독화를 통해 디컴파일시 본인의 코드가 노출되는 것을 방지 할 수 있습니다.
2.불필요한 메서드를 제거하여 멀티덱스를 피할 수 있습니다.
-멀티덱스(multidex)란?
안드로이드 앱을 구성하는 코드는 컴파일 되어 덱스(dex)파일로 만들어집니다.
하나의 덱스(dex)파일에는 최대 65536개의 메소드만 참조 할 수 있습니다.
만약 프로젝트의 코드가 65536개의 메소드를 초과하게 되면 덱스(dex)파일이 여러개가 생성됩니다.
그러면 멀티 덱스를 사용하여 컴파일 할 수 있지만, 빌드 과정에서 앱 내의 파일을 여러개의 덱스파일로 나누어야 하므로
빌드 속도가 느려지고 APK의 용량이 커지게 됩니다.
가능하다면 프로가드를 설정해주면 좋겟죠?
코드 난독화 및 APK최적화를 위한 Android Proguard 사용법에 대해 살펴보겠습니다.
buildTypes{
release{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
App-build.gradle 에서 확인해보면 위와 같이 설정되어 있습니다. 위 코드를 보고 "프로가드 설정이 되어있네?"라고
생각하시면 오산입니다.
1.빌드 타입을 디버깅과 릴리즈 버전으로 나눠줍니다.
buildTypes{
debug{
//프로가드 활성화
minifyEnabled true
//기본 프로가드 설정
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release{
//프로가드 활성화
minifyEnabled true
//기본 프로가드 설정
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
프로가드를 디버깅 버전과 릴리즈 버전으로 나눠서 설정해 주는 것이 좋습니다.
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
위를 자세히 보면 proguardFiles로 되어있는 것을 확인할 수 있습니다.(뒤에 s가 붙어있다.)
참고로 위 코드와 아래코드는 같은 코드입니다.
proguardFile getDefaultProguardFile('proguard-android.txt')
proguardFile 'proguard-rules.pro'
2. 프로가드 활성화 및 debug.pro추가
buildTypes{
debug{
//프로가드 활성화
minifyEnabled true
//기본 프로가드 설정
proguardFile getDefaultProguardFile('proguard-android.txt')
//프로젝트에 필요한 프로가드 설정
proguardFile 'proguard-rules.pro'
//디버그에 필요한 프로가드 설정
proguardFile 'proguard-debug.pro'
}
release{
//프로가드 활성화
minifyEnabled true
//기본 프로가드 설정
proguardFile getDefaultProguardFile('proguard-android.txt')
//프로젝트에 필요한 프로가드 설정
proguardFile 'proguard-rules.pro'
}
}
minifyEnabled 값을 true로 바꿔 주면 프로가드가 적용됩니다.
디버그 시 proguard-debug.pro를 추가해 줌으로써 난독화 및 라인 지워지는 것을 예외 처리 할 수 있습니다.
proguard-debug.pro
# Begin: Debug Proguard rules
-dontobfuscate #난독화를 수행하지 않도록 함
-keepattributes SoureFile,LineNumberTable #소스파일, 라인 정보 유지
# End: Debug ProGuard rules
위는 proguard-debug.pro 파일로 똑같이 작성해 주시면 됩니다.
프로젝트마다 다르겠지만 아래와 같은 버그가 발생했습니다.
3.프로가드시 발생한 버그 처리하기
okio와 retrofit2라이브러리에서 발생한 경고 인데요 저같은 경우 이를 무시해 주는 코드를 넣어 해결했습니다.
proguard-rules.pro
-dontwarn okio.**
-dontwarn retrofit2.**
proguard-rules.pro위와 같은 코드를 추가해 주었습니다.
-dontwarn 패키지명.*은 지정한 경고를 무시해 주는 코드입니다.
4. 적용 결과 확인하기
프로가드를 적용한 APK와 아닌 APK를 비교 분석 해보았습니다.
분석 방법은 Build탭 - Analyze APK를 통해 확인.
-프로가드 사용전
용량 37.2, classes.dex파일이 3개
-프로가드 적용후
classes.dex파일이 하나로 바뀌었다. 용량 33.7로 감소
5.디컴파일하여 난독화 확인해보기
프로가드를 적용한 APK와 아닌 APK를 직접 디컴파일 해서 얼마나 난독화가 잘 이뤄졌는지 확인을 직접 해보면 좋습니다.
https://chelsea-kbj.tistory.com/9
참조 :
https://black-jin0427.tistory.com/89?category=727620
'안드로이드' 카테고리의 다른 글
[Android] Anko alert, startActivity에 대해 알아보자 (0) | 2022.10.27 |
---|---|
[Android] Android DB Room에 대해 알아보자 (0) | 2022.10.25 |
파일다운로드 retrofit2 rxjava (0) | 2022.10.25 |
[Android] Camera PreView 화면 캡처 및 배경 이미지 적용 (3) (0) | 2022.10.25 |
[Android] Camera Preview를 화면 캡처 및 배경 이미지 적용 (2) (0) | 2022.10.25 |