DEX 코드 최적화

DEX 코드 최적화는 앱의 컴파일 품질, 크기, 성능을 모니터링하고 개선하는 데 도움이 되는 Android vitals 발견 항목입니다. R8 또는 대체 도구(예: ProGuard 호환 옵티마이저 또는 보조 DEX 후처리기)를 사용하여 코드를 최적화하고 난독화하면 앱의 DEX 크기가 줄어들고 런타임 성능이 향상되며 메모리 사용량이 최소화됩니다.

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

Android vitals는 모든 앱과 게임의 DEX 코드 최적화 측정항목을 보고하지만 특정 크기 요구사항을 충족하는 앱과 게임에만 기준점을 적용합니다.

문제 감지

앱의 DEX 코드 최적화, 축소 또는 난독화 수준이 최소 정의된 비율을 충족하지 않는 경우 Android vitals가 Play Console에서 알림을 보낼 수 있습니다.

최적화 점수 계산 방식

AGP 8.10 이상의 최신 패치 버전(예: 8.10.0이 아닌 8.10.1)으로 빌드된 앱의 경우 이러한 비율은 포함된 r8.json 파일에서 가져옵니다. 정확한 메타데이터가 생성되도록 마이너 버전에 최신 패치 버전의 AGP 및 R8을 사용해야 합니다.

이전 버전의 AGP로 빌드된 앱 또는 r8.json가 포함되지 않은 대체 코드 최적화 도구로 최적화된 앱의 경우 Android vitals는 mapping.txt 파일(포함된 경우) 또는 DEX 휴리스틱을 사용하여 난독화 비율을 프록시로 추정합니다.

총 DEX 크기 최솟값

Android vitals는 모든 앱의 코드 최적화 측정항목을 계산하지만, App Bundle이 다음 총 DEX 크기 요구사항을 충족하는 경우에만 알림을 받게 됩니다.

  • 앱: 번들에 압축되지 않은 크기로 측정된 DEX 코드가 10MB 이상 포함되어 있습니다.
  • 게임: 번들에 압축되지 않은 크기로 측정된 DEX 코드가 50MB 이상 포함되어 있습니다.

로컬에서 코드 최적화 측정

App Bundle의 압축되지 않은 DEX 크기를 측정하고 Android vitals의 결과와 일치하는 최적화, 축소, 난독화 비율을 가져오려면 android analyze를 실행합니다.

android analyze <yourapp>.aab

문제 해결

낮은 DEX 코드 최적화 점수를 해결하려면 빌드 시스템 및 최적화 도구에 따른 권장사항을 검토하세요.

R8

R8 DEX 코드 최적화 점수를 개선하려면 R8 최적화 개선의 안내를 참고하고 R8 구성 분석기를 사용하여 유지 규칙이 최적화, 축소, 난독화 점수에 미치는 영향을 파악하세요. 이러한 측정항목의 자세한 정의는 보고서 이해하기를 참고하세요.

Android Gradle 플러그인(AGP)을 사용하는 경우 R8 분석기 기술을 사용하여 앱의 유지 규칙을 최적화하는 방법에 관한 추가 안내를 받을 수도 있습니다. Bazel을 사용하는 경우 R8 구성 분석기에도 액세스할 수 있습니다. rules_android 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.** 형식의 유지 규칙을 찾습니다.
  • 라이브러리 소비자 보관 규칙은 식별하기가 쉽지 않을 수 있습니다. 라이브러리 소비자 규칙이 최적화에 영향을 미친다고 의심되는 경우 android analyze <library>.aar를 사용하여 라이브러리를 직접 검사하거나, 최신 버전의 AGP를 사용하여 라이브러리를 독립형 샘플 앱에 추가하고 R8 구성 분석기로 검사하여 유효성을 검사할 수 있습니다.