수색…


소개

Proguard는 무료 Java 클래스 파일 축소 기, 옵티 마이저, obfuscator 및 사전 검증 도구입니다. 사용되지 않는 클래스, 필드, 메소드 및 속성을 감지하고 제거합니다. 바이트 코드를 최적화하고 사용되지 않는 명령어를 제거합니다. 짧은 의미없는 이름을 사용하여 나머지 클래스, 필드 및 메서드의 이름을 바꿉니다.

Proguard로 코드 및 리소스 축소

APK 파일을 가능한 작게 만들려면 축소 빌드를 사용하여 릴리스 빌드에서 사용되지 않는 코드와 리소스를 제거해야합니다. 이 페이지에서는이를 수행하는 방법과 빌드하는 동안 보존하거나 버릴 코드 및 리소스를 지정하는 방법에 대해 설명합니다.

코드 축소는 포함 된 코드 라이브러리의 패키지 라이브러리를 포함하여 패키지 된 응용 프로그램에서 사용되지 않는 클래스, 필드, 메서드 및 특성을 감지하고 제거하는 ProGuard에서 사용할 수 있습니다 (64KB 참조 제한을 해결하는 유용한 도구로 사용). 또한 ProGuard는 바이트 코드를 최적화하고 사용하지 않는 코드 명령어를 제거하며 짧은 이름으로 나머지 클래스, 필드 및 메소드를 난독 화합니다. 애매한 코드로 인해 APK가 리버스 엔지니어링을 어렵게 만듭니다. 앱에서 라이선스 확인과 같은 보안 관련 기능을 사용할 때 특히 유용합니다.

코드 라이브러리의 사용되지 않는 리소스를 포함하여 패키지 앱에서 사용되지 않는 리소스를 제거하는 Gradle 용 Android 플러그인에서 리소스 축소가 가능합니다. 사용되지 않는 코드가 제거되면 더 이상 참조되지 않는 모든 리소스를 안전하게 제거 할 수 있도록 코드 축소와 함께 작동합니다.

코드 축소

ProGuard 를 사용하여 코드 축소를 사용하려면 build.gradle 파일의 적절한 빌드 유형에 minifyEnabled true를 추가하십시오.

코드가 축소되면 빌드 시간이 느려지므로 가능한 경우 디버그 빌드에서 사용하지 않는 것이 좋습니다. 그러나 유지할 코드를 충분히 사용자 정의하지 않으면 버그가 발생할 수 있으므로 테스트에 사용 된 최종 APK에서 코드 축소를 사용하는 것이 중요합니다.

예를 들어 build.gradle 파일의 다음 코드 조각은 릴리스 빌드의 코드 축소를 가능하게합니다.

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

minifyEnabled 속성 외에도 proguardFiles 속성은 ProGuard rules 정의합니다.

getDefaultProguardFile ( 'proguard-android.txt') 메소드는 Android SDK tools/proguard/ folder 에서 기본 ProGuard 설정을 가져옵니다. 팁 : 더 많은 코드를 축소하려면 동일한 위치에있는 proguard-android-optimize.txt 파일을 사용해보십시오. 여기에는 동일한 ProGuard 규칙이 포함되어 있지만 바이트 코드 수준 (메소드 내부 및 메소드 전반)에서 분석을 수행하는 다른 최적화 기능이있어 APK 크기를 줄이고 더 빠르게 실행할 수 있습니다. proguard-rules.pro 파일은 사용자 정의 ProGuard 규칙을 추가 할 수있는 곳입니다. 기본적으로이 파일은 모듈 루트 (build.gradle 파일 옆)에 있습니다. 각 빌드 변형에 고유 한 ProGuard 규칙을 추가하려면 해당 productFlavor 블록에 다른 proguardFiles 속성을 추가하십시오. 예를 들어, 다음 Gradle 파일은 flavor2- rules.pro를 flavor2 제품 flavor에 추가합니다. flavor2는 릴리스 블록에있는 규칙이 적용되기 때문에 3 가지 ProGuard 규칙을 모두 사용합니다.

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                   'proguard-rules.pro'
        }
    }
    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'flavor2-rules.pro'
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow