Program Club

“minifyEnabled”대“shrinkResources”-차이점은 무엇입니까?

proclub 2020. 12. 1. 19:59
반응형

“minifyEnabled”대“shrinkResources”-차이점은 무엇입니까? 그리고 절약 된 공간을 얻는 방법?


배경

Andriod 문서 ( 여기 ) 의 "Resource Shrinking"웹 페이지에 따르면 다음 줄을 사용하여 build.gradle 파일을 통해 앱의 크기를 최소화 할 수 있습니다.

android {
    ...

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

그리고 그들은 그것을 사용할 때 프로세스에서 얼마나 절약되는지 알려줄 것이라고 말합니다.

shrinkResources를 사용 설정하면 앱을 빌드 할 때 빌드 중에 다음과 같은 출력이 표시되어야합니다.

... 사용하지 않는 리소스 제거 : 바이너리 리소스 데이터가 2570KB에서 1711KB로 감소 : 33 % 제거

질문

이러한 질문에 대한 답을 찾을 수 없습니다.

  1. Android-Studio 자체를 사용하여 서명 된 앱을 만들 때 저장 한 양과 제거 / 수정 된 파일에 대한 정보를 어디서 찾을 수 있습니까?
  2. "shrinkResources"가 "minifyEnabled"가하지 않는 것은 정확히 무엇입니까? 그리고 "shrinkResources"가 "minifyEnabled"에 의존하는 이유는 무엇입니까?
  3. 이러한 옵션이 이미지 파일의 크기 및 / 또는 품질에 영향을 줍니까?
  4. Proguard가 소스 코드 축소를 담당하지 않습니까? "코드 축소 기능을 켜려면 minifyEnabled를 활성화해야합니다."라는 메시지가 표시되기 때문입니다.

보자

Android-Studio 자체를 사용하여 서명 된 앱을 만들 때 저장 한 양과 제거 / 수정 된 파일에 대한 정보를 어디서 찾을 수 있습니까?

그것들은 gradle 로그에있을 것입니다. Android 스튜디오 내에서 나는 그것들이 Messages창 (Android, Run, TODO 창 옆)에 표시된다고 생각합니다 .

"shrinkResources"가 "minifyEnabled"가하지 않는 것은 정확히 무엇입니까? 그리고 "shrinkResources"가 "minifyEnabled"에 의존하는 이유는 무엇입니까?

minifyProGuard를 실행합니다. shrinkProGuard가 사용하지 않는 것으로 표시된 리소스를 제거합니다.

이러한 옵션이 이미지 파일의 크기 및 / 또는 품질에 영향을 줍니까?

아니!

Proguard가 소스 코드 축소를 담당하지 않습니까? "코드 축소 기능을 켜려면 minifyEnabled를 활성화해야합니다."라는 메시지가 표시되기 때문입니다.

ProGuard는 코드 만 축소합니다 . 폴더에있는 항목 shrinkResources일뿐 /res/입니다. shrinkResources실행할 ProGuard의 로그 출력에 따라 다릅니다. ProGuard는 실제로 코드를 분석하여 사용하지 않는 것을 파악하는 사람입니다.

편집하다:

방금 아주 멋진 블로그 게시물을 찾았습니다. CommonsWare가 다른 stackOverlow 질문에 게시했습니다. http://cyrilmottier.com/2014/08/26/putting-your-apks-on-diet/

그것은 당신의 후속 질문을 완벽하게 설명합니다.

왜 하나가 다른 것에 의존할까요?

게시물에서 :

Proguard는 Java 측에서 작동합니다. 불행히도 리소스 측면에서는 작동하지 않습니다. 결과적으로 res / drawable의 my_image 이미지가 사용되지 않는 경우 Proguard는 R 클래스에서 참조 만 제거하지만 관련 이미지는 제자리에 유지합니다.

즉, shrinkResources드로어 블이 폴더에 있고 R클래스 에는없는 경우에만 비교합니다 .


2 번과 4 번 질문에 대한 답변 은이 주제에 대한 기타 유용한 정보와 함께 Android Dev Summit 2015의이 비디오에서 찾을 수 있습니다 .

논의 된 요점의 개요는 다음과 같습니다.

  • shrinkResourcesminifyEnabled참인 경우에만 고려됩니다.

  • minifyEnabled코드를 shrinkResources축소하고 코드에서 참조되지 않는 리소스를 축소합니다.

  • 기본적 shrinkResources으로 safe모드 에서 실행 됩니다. 로 전환 하면 리소스 축소에 영향을 미치도록 수동으로 strict제공 tools:keep하고 tools:discard플래그 지정할 수 있습니다 .


  • shrinkResources는 생성 된 APK의 크기를 줄이고 사용하지 않는 리소스를 제거하는 데 유용합니다.
  • minifiedEnabled는 단순히 Android 플러그인이 사용하지 않는 코드없이 APK를 패키징하도록 도와주는 Proguard를 실행하여 축소합니다.

참고 URL : https://stackoverflow.com/questions/30800804/minifyenabled-vs-shrinkresources-whats-the-difference-and-how-to-get-the

반응형