본문 바로가기

Android

Android Proguard

반응형

Obfuscating and Shrinking your code

프로가드를 통해서 안드로이드 프로젝트의 난독화와 최적화를 할 수 있다.

 

obfuscate: 난독화

Shrink : 수축, 축소

optimize : 최적화

 

Android Gradle 플러그인 3.4.0 이상을 사용하여 프로젝트를 빌드하는 경우 플러그인은 더 이상 ProGuard를 사용하여 컴파일 시간 코드 최적화 작업을 하지 않습니다. 대신 플러그인은 R8 컴파일러를 이용하여 다음의 컴파일 시간 작업을 처리합니다.

 

proguard 설정 방법

android {
    buildTypes {

	debug {
		mifinyEnalbled false
	}
        
        release {
            // Enables code shrinking, obfuscation, and optimization for only
            // your project's release build type.
            minifyEnabled true

            // Enables resource shrinking, which is performed by the
            // Android Gradle plugin.
            shrinkResources true

            // Includes the default ProGuard rules files that are packaged with
            // the Android Gradle plugin. To learn more, go to the section about
            // R8 configuration files.
            proguardFiles getDefaultProguardFile(
                    'proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        }
    }
    ...
}

minifyEnabled : code 의 최적화, 난독화, 축소

shrinkResources : 리소스에 축소

porguard-android-optimize.txt , proguard-android.txt

-> 안드로이드 SDK 홈(/Library/Android/sdk/tools/proguard)에 포함되어있다.

proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")

이런식으로 default 와 사용자 옵션을 정의해서 쓴다.

 

프로가드 옵션

  • dontusemixedcaseclassnames

    대소문자가 혼합된 클래스명을 허용하지 않음

    난독화 해서 나온 파일명을 소문자로만 쓰겠다

  • verbose

    진행상황을 표시해준다.

  • dontshrink

    사용하지 않는 메소드를 유지하라

    라이브러리를 개발한다면 이 옵션을 꼭 추가해야 한다.

  • dontskipnonpubliclibraryclasses

    Specifies not to ignore non-public library classes

    public library class 가 아닌 것을 무시하지 않음

    4.5부터 기본 옵션임

    → 라이브러리내의 non-public 클래스를 난독화 처리한다.

  • renamesourcefileattribute sourcefile

    소스 파일 변수 명 바꾸는 옵션.

  • keepattributes sourcefile, linenumbertable

    소스 파일의 라인을 섞지 않는 옵션.

  • keepattributes annotation

    어노테이션 바꾸지 않는 옵션.

  • keepattributes signature

    제너릭 타입 정보 보존

  • keepattributes Exceptions

    Retain declared checked exceptions for use by a Proxy instance.

  • dontwarn

    패키지를 지정해서 경고 무시

  • ignorewarnings

    경고 무시

  • dontoptimize

    최적화 하지 않기

 

난독화 예외 처리 방법

  • 특정 클래스를 난독화 하지 않는 방법

    -keep class com.babosamo.ClassA

  • 특정 패키지를 난독화 하지 않는 방법

    -keep class com.babosamo.pacageA.** {*;}

  • 특정 class 를 상속받은 클래스를 낙독화 하지 않느 방법

    -keep class * implements com.babosamo.ClassA

 

추가 사항

gson 이나 retofit 처럼 reflection 을 기반으로 동작하는 라이브러리 추가 시 가이드 문서에 프로가드 옵션이 있는지 확인해야한다.

 

 

참고 : 

developer.android.com/studio/build/shrink-code