UFO ET IT

Android에 포함 된 타사 라이브러리에서 사용하지 않는 리소스를 제거하려면 어떻게해야합니까?

ufoet 2020. 12. 1. 20:10
반응형

Android에 포함 된 타사 라이브러리에서 사용하지 않는 리소스를 제거하려면 어떻게해야합니까?


내 앱에 연결하는 타사 라이브러리에는 내 애플리케이션에서 사용하지 않는 리소스 파일이 포함되어있어 결국 내 APK가 커지게됩니다.

예를 들어, Google Play 서비스 라이브러리를 포함하지만 로그인 버튼 기능을 사용하지 않습니다. 이러한 모든 이미지 및 레이아웃 리소스는 최종 빌드에서 끝납니다.

이러한 리소스는 컴파일 된 라이브러리에 포함되어 있으므로 빌드에서 제거하려면 어떻게해야합니까?


이 답변은 MinifyEnabled 및 shrinkResources를 사용하는 방법을 설명하는 사용하지 않는 리소스 제거 에서 요약 됩니다. 자세한 내용은 공식 문서 페이지 에서 다룹니다 .

애플리케이션 코드 경로에서 사용하지 않는 자산을 포함하는 타사 라이브러리의 일반적인 문제이며 사용자를 위해 더 작은 APK 파일을 생성하려면 해당 자산을 제거하는 것이 매우 중요합니다. 고맙게도 최신 버전의 Gradle 및 Android Studio는 도움이되는 솔루션을 제공합니다.

설정하여 minifyEnabledshrinkResources 당신의 Gradle을 구성 true로를, 시스템은 응용 프로그램에서 사용하지 않는 자원을 제거 앞으로 이동합니다.

android {
    ...

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

사용하지 않는 리소스를 제거하려면 minifyEnabled 플래그를 설정해야합니다. 이 플래그 ( 사용하지 않는 코드 제거 에서 언급 한대로 )는 ProGuard를 트리거하여 애플리케이션에서 사용하지 않는 코드 경로를 제거합니다. 이것은 포함 된 라이브러리에서 리소스를 제거하는 중요한 단계입니다. 코드 경로가 제거되지 않은 경우 컴파일러는 리소스가 기존 코드 경로에서 참조되는 것으로 믿고 제대로 제거하지 않습니다.

이것이 매우 광범위한 시스템이라는 점은 주목할 가치가 있습니다. 예를 들어, 코드의 특정 문자열 상수는 물론 file:///….유지할 형식의 URL을 찾는 다양한 res / raw 리소스를 살펴 봅니다. CSS, HTML 및 JavaScript 파일도 분석 할 수 있습니다.

이제 여기에 거짓 양성 또는 거짓 음성이있을 수 있습니다. 반대 동작을 원할 때 자산이 잘 리거나 유지 될 수 있습니다. (공정하게 말하면 리소스 축소는 지나치게 열심 인 경향이 있습니다 ...)이를 조정하기 위해 tools : keeptools : discard 속성을 추가하여 규칙에 따라 res/raw/keep.xml파일 에서 원하는 동작을 정의 할 수 있습니다 .

<resources xmlns:tools="http://schemas.android.com/tools"
     tools:keep= "@layout/l_used*_c,  @layout/l_used_b*"
     tools:discard="@layout/unused2"
/>

shrinkResources어떤 이유로 사용할 수없는 경우 최소한 resConfig지원하지 않는 언어를 제거 하는 사용할 수 있습니다 .

defaultConfig {
    resConfig "en"     
}

참고 URL : https://stackoverflow.com/questions/33112527/how-do-i-remove-unused-resources-from-third-party-libraries-i-ve-included-on-and

반응형