Android 스튜디오를 사용하거나 R8 빌드 메타데이터를 확인하여 시작 프로필이 작동하는지 확인할 수 있습니다.
Android 스튜디오에서 확인
DEX 레이아웃 최적화를 확인하려면 Android 스튜디오를 사용하여 APK를 열고 DEX 파일의 클래스를 확인합니다. 기본 classes.dex
가 완전히 채워지지 않았는지 확인합니다. 앱이 단일 DEX 파일로 구성된 경우 시작 프로필을 사용 설정한 후 앱에 DEX 파일이 두 개 포함되어 있는지 확인할 수 있습니다.
시작 클래스가 단일 DEX 파일에 맞지 않으면 Android 스튜디오에서 경고를 표시합니다.
시작 클래스의 시작 외 메서드 수가 포함된 진단 정보를 가져오려면 시작 프로필을 적용할 때 settings.gradle
파일을 다음과 같이 변경하여 R8 컴파일러가 최소 버전 8.3.36-dev로 업데이트되었는지 확인하세요.
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Groovy
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Gradle로 빌드할 때 다음 명령어에서 assembleRelease
뒤에 --info
를 추가해야 합니다.
./gradlew assembleRelease --info
그러면 진단이 터미널에 출력됩니다.
앱 또는 라이브러리가 디슈가링된 API를 참조하는 경우 이러한 클래스의 번들로 묶인 호환성 구현은 항상 마지막 DEX 파일에 포함됩니다. 이 디슈가링된 마지막 DEX 파일은 DEX 레이아웃 최적화에 참여하지 않습니다.
번들 메타데이터로 확인
AGP 8.8부터 R8은 DEX 레이아웃 최적화가 성공적으로 이루어졌는지 확인하는 데 사용할 수 있는 메타데이터를 Android App Bundle (AAB)에 출력합니다. 최적화가 작동하는지 확인하려면 다음 단계를 따르세요.
앱의 AAB를 빌드합니다.
./gradlew app:bundleRelease
"startup": true
텍스트가 포함된 DEX 파일이 하나 이상 있는지 확인합니다.메타데이터를 엽니다.
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
AAB의 경로는
app/build/outputs/bundle/release/app-release.aab
과 같을 수 있습니다.출력을 확인합니다. 다음과 같이 표시됩니다.
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
메타데이터에
"startup": false
만 표시되면 시작 프로필을 사용 설정하고 시작 프로필이 난독화되지 않았는지 확인해야 합니다.메타데이터의 SHA-256 값이 AAB의 값과 일치하는지 확인합니다. 모든 DEX 파일의 SHA-256 값을 가져오려면 다음을 실행합니다.
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
출력은 다음과 같이 표시됩니다.
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex
해시 값을 1단계의 'checksum' 값과 비교합니다. SHA-256 값이 일치하지 않으면 컴파일 단계가 R8의 DEX 파일 출력 기능을 방해하는 것일 수 있습니다.