Proguard 적용하기

지프치프·2022년 11월 14일
0

Android

목록 보기
57/85
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


Proguard?

Proguard는 대표적으로 2가지의 기능을 제공한다.

  • 난독화
    코드 난독화를 통하여 디컴파일 시 코드 유출을 방지

  • 최적화
    불필요한 메소드를 제거하여 Dex파일의 용량을 줄인다.
    이는 Multidex를 예방할 수 있으며 APK의 용량을 줄여준다.

MultiDex?

안드로이드의 소스코드는 안드로이드 가상머신(ART) 위에서 동작하기 위해 DEX 파일로 컴파일 된다.
이때 하나의 DEX파일은 메소드 수가 64k(65536)개를 초과할 수 없다.
그래서 메소드 수가 64k개를 초과하지 않도록 여러 개의 Dex 파일로 저장되는 것을 Multidex라고 한다.
하지만 여러 개가 생성된 Dex파일을 컴파일 하면 빌드 속도가 느려지고
APK의 용량이 커지게 된다.

사용해보자

우선 app 수준의 build.gradle로 들어가자

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

프로젝트를 만들면 기본적으로 위와 같이 작성이 되어있을 것이다.
여기서 minifyEnabled를 true로 설정해주면
Proguard 설정이 끝난다.

하지만 여기서 조심해야할 점이 있는데
위의 코드블록을 살펴보면
release라는 이름으로 묶여있는 것을 볼 수 있는데
이는 Release 버전의 APK에 한해서만 적용한다는 뜻이다.
Debug APK에도 적용을 하고 싶다면
Debug 코드블록을 추가해주면 된다.

buildTypes {
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

위와 같이 작성했다면 이제 Debug APK에도 Proguard가 적용된다.

디컴파일

이제 적용한 APK를 디컴파일 해보자.
디컴파일 툴은 여기를 참고하길 바란다.


먼저 Proguard를 적용하지 않은 APK를 디컴파일 해보았다.
Activity를 비롯한 여러 클래스가 그대로 노출되어 있다.
Dex파일도 4개나 된다.


Proguard를 적용한 APK이다.
소스코드가 여러 패키지로 나뉘어 알아볼 수 없고 코드 내용을 확인해봐도
난해한 내용들 뿐이다.
그리고 Dex파일은 1개로 줄었다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글