DEX 코드 최적화는 앱의 컴파일 품질, 크기, 성능을 모니터링하고 개선하는 데 도움이 되는 Android vitals 발견 항목입니다. R8 또는 대체 도구 (예: ProGuard 호환 최적화 도구 또는 보조 DEX 후처리 도구)를 사용하여 코드를 최적화하고 난독화하면 앱의 DEX 크기가 줄어들고 런타임 성능이 개선되며 메모리 사용 공간이 최소화됩니다.
DEX(Dalvik Executable) 파일에는 앱을 실행하는 데 사용되는 컴파일된 코드가 포함됩니다. 여기에는 일반적으로 컴파일된 C++ 코드 또는 .so 파일이 아닌 Java 및 Kotlin 코드가 포함됩니다.
Android vitals는 모든 앱과 게임의 DEX 코드 최적화 측정항목을 보고하지만 특정 크기 요구사항을 충족하는 앱과 게임에만 기준점을 적용합니다.
문제 감지
Android vitals는 앱의 DEX 코드 최적화 수준이 낮을 때 알림을 보낼 수 있습니다. 여기에는 R8을 사용하는 앱과 게임의 난독화, 축소, 최적화가 포함됩니다. R8을 사용하지 않는 앱의 경우 Android vitals는 최적화, 축소, 난독화 비율을 확인하려고 시도하지만 필요한 경우 난독화 휴리스틱을 프록시로 사용합니다.
최적화 상태 모니터링
Android vitals를 사용하면 앱이 코드 최적화에 대해 정의된 최소 비율을 충족하지 않는 경우 Play Console을 통해 알림을 보냄으로써 앱의 성능을 개선할 수 있습니다. 축소, 최적화, 난독화에 관한 자세한 정의는 R8 구성 분석기 사용을 참고하세요.
AGP 버전 8.10 이상의 최신 패치로 빌드된 앱의 경우 이러한 비율은 포함된 r8.json 파일에서 가져옵니다.
AGP의 이전 버전 또는 r8.json 파일이 포함되지 않은 경우 비율은 포함된 경우 mapping.txt 파일에서 계산하거나 매핑 파일을 사용할 수 없는 경우 DEX 휴리스틱을 사용하여 계산됩니다.
대체 코드 최적화 도구로 최적화된 앱의 경우 Android vitals는 분석을 실행하여 App Bundle에서 난독화된 클래스, 메서드, 필드의 비율을 추정합니다.
총 DEX 크기 최소값
Android vitals는 모든 앱의 코드 최적화 측정항목을 계산하지만 App Bundle이 다음 총 DEX 크기 요구사항을 충족하는 경우에만 알림을 받게 됩니다.
- 앱: 번들에 압축되지 않은 크기로 측정된 DEX 코드가 10MB 이상 포함되어 있습니다.
- 게임: 번들에 압축되지 않은 크기로 측정된 DEX 코드가 50MB 이상 포함되어 있습니다.
Android vitals는 앱의 DEX 크기를 표시하지만 명령줄을 사용하여 로컬에서 측정할 수도 있습니다.
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
로컬에서 R8 코드 최적화 측정
앱이 R8로 최적화되는 경우 App Bundle의 최적화, 난독화, 축소를 R8 구성 분석기를 사용하여 측정할 수 있습니다. R8 구성 분석기 보고서는 R8 분석기 스킬에도 포함되어 있습니다. 보고서를 통해 유지 규칙이 최적화, 축소, 난독화 점수에 미치는 영향을 파악할 수 있지만 이러한 비율은 최적화 전에 계산되므로 보고서의 비율이 Android vitals의 값과 일치하지 않습니다.
Android vitals에서 점수를 계산하는 데 사용하는 정확한 메타데이터를 검사하려면 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파일을 업로드해야 함). 난독화된 상태에서 이러한 파일 중 일부가 계속 크면 패키지 전체 유지 규칙의 영향을 받을 가능성이 큽니다. - R8을 사용하지 않는 경우
proguard-rules.pro파일,configuration.txt또는 최적화 도구에 해당하는 파일을 살펴보고 난독화되지 않는 패키지와 일치하는 유지 규칙을 검색합니다. 예를 들어 dex에서com.foo.가 큰 패키지인 경우-keep com.foo.**또는-keep com.foo.bar.**형식의 유지 규칙을 찾습니다. - 라이브러리 소비자 유지 규칙은 식별하기가 쉽지 않을 수 있습니다. 라이브러리 소비자 규칙이 최적화에 영향을 미친다고 생각되면 최신 버전의 AGP를 사용하여 독립형 샘플 앱에 추가하고 R8 구성 분석기로 검사하여 로컬에서 유효성을 검사할 수 있습니다.