Вы можете проверить, что ваши профили запуска работают, используя Android Studio или просматривая метаданные сборки R8.
Подтвердите с помощью Android Studio
Чтобы подтвердить оптимизацию макета DEX, используйте Android Studio, чтобы открыть APK и проверить классы в файлах DEX. Убедитесь, что основной classes.dex
заполнен не полностью. Если ваше приложение состоит из одного файла DEX, вы можете проверить, содержит ли приложение два файла DEX, после включения профиля запуска.
Android Studio предупреждает вас, если классы запуска не помещаются в один файл DEX. Чтобы получить диагностическую информацию, включающую количество незапускаемых методов в классах запуска, убедитесь, что компилятор R8 обновлен как минимум до версии 8.3.36-dev, внеся следующие изменения в файл settings.gradle
при применении профиля запуска:
Котлин
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
классный
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Обязательно добавьте --info
после assembleRelease
в следующей команде при сборке с помощью Gradle.
./gradlew assembleRelease --info
Диагностическое сообщение затем распечатывается на терминале.
Если ваше приложение или какие-либо библиотеки ссылаются на какие-либо отключенные API , связанные реализации совместимости этих классов всегда содержатся в последнем файле DEX. Этот обессахаренный последний файл DEX не участвует в оптимизации макета DEX.
Подтвердите с помощью метаданных пакета.
Начиная с AGP 8.8, R8 выводит метаданные в ваш пакет приложений Android (AAB), которые вы можете использовать для проверки успешности оптимизации макета DEX. Чтобы проверить, сработала ли оптимизация, сделайте следующее:
Создайте AAB вашего приложения:
./gradlew app:bundleRelease
Убедитесь, что существует хотя бы один файл DEX, содержащий текст
"startup": true
.Откройте метаданные:
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. Чтобы получить значения SHA-256 для всех ваших файлов DEX, выполните следующее:
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. Если значения SHA-256 не совпадают, возможно, это этап компиляции, мешающий возможности R8 выводить файлы DEX.