您可以使用 Android Studio 或查看 R8 构建元数据来检查您的启动配置文件是否正常运行。
使用 Android Studio 确认
要确认 DEX 布局优化,请使用 Android Studio 打开 APK 并验证 DEX 文件中的类。确保主要 classes.dex
没有完全填满。如果您的应用由单个 DEX 文件组成,您可以在启用启动配置文件后检查应用是否包含两个 DEX 文件。
如果启动类不适合单个 DEX 文件,Android Studio 会发出警告。要获取包含启动类中非启动方法数量的诊断信息,请确保在应用启动配置文件时对 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 会在您的 Android App Bundle (AAB) 中输出元数据,您可以使用这些元数据来检查 DEX 布局优化是否成功。要检查优化是否有效,请执行以下操作
构建应用的 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 文件的能力。