DEX 代码优化是一项 Android Vitals 发现结果,可帮助您监控和改进应用的编译质量、大小和性能。使用 R8 或替代工具(例如与 ProGuard 兼容的优化器或辅助 DEX 后处理器)优化和混淆代码,可缩减应用的 DEX 大小、提升运行时性能并最大限度地减少其内存占用。
DEX(即 Dalvik 可执行文件)包含用于运行应用的已编译代码。这通常包括 Java 和 Kotlin 代码,而不是已编译的 C++ 代码或 .so 文件。
Android Vitals 会报告所有应用和游戏的 DEX 代码优化指标,但仅对满足特定大小要求的应用和游戏强制执行阈值。
检测问题
当应用的 DEX 代码优化、缩减或混淆级别未达到定义的最低百分比时,Android Vitals 可以在 Play 管理中心内向您发出提醒。
优化得分的计算方式
对于使用 AGP 8.10 或更高版本的最新补丁版本(例如 8.10.1,而非 8.10.0)构建的应用,这些百分比是从包含的 r8.json 文件中提取的。请确保您使用的是 AGP 和 R8 次要版本的最新补丁版本,以便生成准确的元数据。
对于使用较低版本 AGP 构建的应用,或使用不包含 r8.json 的其他代码优化工具进行优化的应用,Android Vitals 会使用 mapping.txt 文件(如果包含)或 DEX 启发法来估算混淆百分比。
DEX 总大小下限
虽然 Android Vitals 会为所有应用计算代码优化指标,但只有当您的 app bundle 满足以下 DEX 总大小要求时,您才会收到提醒:
- 应用:app bundle 包含至少 10 MB 的 DEX 代码(按未压缩大小计算)
- 游戏:app bundle 包含至少 50 MB 的 DEX 代码(按未压缩大小衡量)
在本地衡量代码优化效果
如需测量 app bundle 的未压缩 DEX 大小,并获取与 Android Vitals 中的结果一致的优化、缩减和混淆百分比,请运行 android analyze:
android analyze <yourapp>.aab
解决问题
如需解决 DEX 代码优化得分较低的问题,请根据您的构建系统和优化工具查看相应建议:
R8
如需提高 R8 DEX 代码优化得分,请参阅改进 R8 优化中的指南,并使用 R8 配置分析器了解保留规则如何影响优化、缩减和混淆得分(如需详细了解这些指标的定义,请参阅了解报告)。
如果您使用 Android Gradle 插件 (AGP),还可以使用 R8 分析器技能获取有关优化应用保留规则的其他指导。如果您使用 Bazel,还可以使用 R8 配置分析器;请参阅 rules_android R8 优化文档。
非 R8 优化器和 DEX 后处理器
如果您的构建流水线使用自定义构建工具或辅助 DEX 后处理器,请执行以下步骤来改进应用的优化:
- 在 Android Studio 中打开 app bundle,然后在 APK 分析器中查看。
- 选择所有
.dex文件。 - 切换“去混淆名称”按钮时,请密切关注大小最大的文件(注意:这需要您加载
mapping.txt文件)。如果您发现其中一些文件在混淆后仍然很大,则可能是因为它们受到了针对整个包的保留规则的影响。 - 在
proguard-rules.pro文件configuration.txt中(如果您未使用 R8,则在优化器的等效文件中)查找与未被混淆处理的软件包匹配的 keep 规则。例如,如果com.foo.是 DEX 文件中的一个大型软件包,请查找格式为-keep com.foo.**或-keep com.foo.bar.**的保留规则。 - 请注意,库使用方 keep 规则可能不那么容易识别。如果您怀疑库使用方规则会影响优化,可以使用
android analyze <library>.aar直接检查库,也可以通过以下方式进行验证:使用最新版本的 AGP 将库添加到独立的示例应用中,然后使用 R8 配置分析器进行检查。