Подтвердить оптимизацию профилей запуска

Вы можете проверить, что ваши профили запуска работают, используя 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. Чтобы проверить, сработала ли оптимизация, сделайте следующее:

  1. Создайте AAB вашего приложения:

    ./gradlew app:bundleRelease
    
  2. Убедитесь, что существует хотя бы один файл DEX, содержащий текст "startup": true .

    1. Откройте метаданные:

      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 .

    2. Проверьте вывод, который должен выглядеть примерно так:

          inflating: r8.json
      [
        {
          "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951",
          "startup": true
        }
      ]
      

    Если в метаданных вы видите только "startup": false , вам необходимо включить профили запуска и убедиться, что ваш профиль запуска не запутан.

  3. Убедитесь, что значения 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.