DEX 코드 최적화

R8 또는 대체 도구 (예: ProGuard 호환 옵티마이저 또는 보조 DEX 후처리기)를 사용하여 코드를 최적화하고 난독화하면 앱의 DEX 크기가 줄어들고, 런타임 성능이 개선되며, 메모리 사용 공간이 최소화됩니다.

DEX(Dalvik Executable) 파일에는 앱을 실행하는 데 사용되는 컴파일된 코드가 포함됩니다. 여기에는 일반적으로 컴파일된 C++ 코드나 .so 파일이 아닌 Java 및 Kotlin 코드가 포함됩니다.

로컬에서 R8 코드 최적화 측정

명령줄을 사용하여 앱 번들의 압축되지 않은 DEX 크기를 로컬에서 측정하려면 다음을 실행하세요.

unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

앱이 R8로 최적화되는 경우 R8 구성 분석기를 사용하여 앱 번들의 최적화, 난독화, 축소를 측정할 수 있습니다. 축소, 최적화, 난독화에 관한 자세한 정의는 R8 구성 분석기 사용을 참고하세요. R8 구성 분석기 보고서도 R8 분석기 스킬에 포함되어 있습니다.

AGP 버전 8.10 이상용으로 App Bundle에 삽입된 최적화 후 메타데이터를 검사하려면 r8.json 파일을 추출하세요.

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

문제 해결

DEX 코드 최적화 점수가 낮은 문제를 해결하려면 빌드 시스템 및 최적화 프로그램에 따라 다음 추천을 검토하세요.

Android Gradle 플러그인 및 R8

R8 DEX 코드 최적화 점수를 개선하려면 R8 최적화 개선의 안내를 참고하세요. R8 분석기 스킬을 사용하여 앱의 유지 규칙을 최적화하는 방법에 관한 추가 안내를 확인할 수도 있습니다.

R8이 아닌 빌드 시스템 및 DEX 후처리기

빌드 파이프라인에서 맞춤 빌드 도구나 보조 DEX 후처리기를 사용하는 경우 다음 단계에 따라 앱의 최적화를 개선하세요.

  • Android 스튜디오에서 App Bundle을 열고 APK Analyzer에서 확인합니다.
  • .dex 파일을 모두 선택합니다.
  • '난독화된 이름' 버튼을 전환할 때 크기가 가장 큰 파일에 주의하세요 (참고: mapping.txt 파일 업로드 필요). 난독화된 후에도 일부 파일이 큰 상태로 유지된다면 패키지 전체 유지 규칙의 영향을 받는 것일 수 있습니다.
  • proguard-rules.pro 파일, configuration.txt 또는 R8을 사용하지 않는 경우 최적화 프로그램에 해당하는 파일을 살펴보고 난독화되지 않는 패키지와 일치하는 유지 규칙을 검색합니다. 예를 들어 com.foo.가 dex의 큰 패키지인 경우 -keep com.foo.** 또는 -keep com.foo.bar.** 형식의 유지 규칙을 찾습니다.
  • 라이브러리 소비자 보관 규칙은 식별하기가 쉽지 않을 수 있습니다. 라이브러리 소비자 규칙이 최적화에 영향을 미친다고 의심되는 경우 최신 버전의 AGP를 사용하여 독립형 샘플 앱에 추가하고 R8 구성 분석기로 검사하여 로컬에서 유효성을 검사할 수 있습니다.