안드로이드 #3 Proguard

0

안드로이드

목록 보기
6/19
post-thumbnail

코드를 분석하다 보니 Proguard라는게 눈에걸렸다.
근데 요놈이 신통방통한 물건이라서 설명해본다.
일반적으로 안드로이드는 컴파일 될경우, DEX 파일로 이루어진다. 65536개의 메소드를 가질수 있으며, 초과할경우 DEX 파일이 여러개 생성된다.
하지만 그럴경우 APK의 용량이 커진다. 이것을 없애기 위해
Proguard를 설정한다.<- 이것은 릴리즈한상태에서만 이루어진다. 개발중일때는 상관없다.

Android Proguard 가 필요한 이유

  • 코드 난독화를 통해 디컴파일시 본인의 코드가 노출되는 것을 방지 할 수 있습니다.
  • 불필요한 메서드를 제거하여 멀티덱스를 피할 수 있습니다.


난독화 전의 코드


난독화 후의 코드

설정해주는 부분 Bulid-gradle

buildTypes {

    debug {
        // 프로가드 활성화
        minifyEnabled true

        // 기본 프로가드 설정
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
   
    }

    release {
        // 프로가드 활성화
        minifyEnabled true

        // 기본 프로가드 설정
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

       
    }

라이브러리또한 난독화 되므로 proguard-debug.pro에서 예외처리를 해줘야한다.

  • dontwarn 패키지명.* 은 지정한 경고를 무시해 주는 코드
  • keep class 패키지명.** : 난독화가 필요하지 않은 경우
  • keepclassmembers : 특정 클래스 멤버 원상태 유지

적용 사례

실제 개발 중인 어플을 적용해 보았습니다. 사용하지 않은 경우는 54006개 사용하고 있고 패키를 봐도 불필요한 메서드들이 다 포함되어있습니다.
하지만 아래 적용된 경우를 보면 16432개 를 사용하고 있고 불필요한 패키지및 메서드가 제거된것을 볼수 있습니다.
앱의 용량도 적용하지 않은 경우와 적용한경우 비교시 1/4 만큼 줄어든것을 보았습니다.
shrinkResources 명령어를 통해서 리소스 용량 32MB - > 26MB 로 줄어든것을 볼수 있습니다.

출처: https://iw90.tistory.com/298 [woong's]

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글