DEX 代码优化

DEX 代码优化是一项 Android Vitals 发现,可帮助您监控和提高应用的编译质量、大小和性能。使用 R8 或替代工具(例如 ProGuard 兼容的优化器或辅助 DEX 后处理器)优化和混淆代码,可减小应用的 DEX 大小、提升运行时性能并最大限度地减少其内存占用。

DEX(即 Dalvik Executable)文件包含用于运行应用的已编译代码。这通常包括 Java 和 Kotlin 代码,而不是已编译的 C++ 代码或 .so 文件。

Android Vitals 会报告所有应用和游戏的 DEX 代码优化指标,但仅针对满足特定大小要求的应用和游戏强制执行阈值。

检测问题

当应用的 DEX 代码优化级别较低时,Android Vitals 可以提醒您。这包括使用 R8 的应用和游戏的混淆、缩减和优化。对于未使用 R8 的应用,Android Vitals 会尝试检查优化、缩小和混淆率,但在必要时会回退到混淆启发法作为代理。

监控优化状态

当您的应用未达到代码优化的最低定义百分比时,Android Vitals 可以通过 Play 管理中心提醒您,从而帮助您改进应用性能。如需详细了解缩减、优化和混淆处理,请参阅使用 R8 配置分析器

对于使用 AGP 版本 8.10 或更高版本的最新补丁构建的应用,这些百分比是从包含的 r8.json 文件中提取的。

对于较低版本的 AGP 或未包含 r8.json 文件的情况,系统会根据 mapping.txt 文件(如果包含)计算百分比,或者在没有映射文件的情况下使用 DEX 启发式方法。

对于使用替代代码优化器进行优化的应用,Android Vitals 会执行分析,以估计 app bundle 中混淆的类、方法和字段的百分比。

DEX 总大小下限

虽然 Android Vitals 会计算所有应用的™代码优化指标,但只有当您的 app bundle 满足以下总 DEX 大小要求时,您才会收到提醒:

  • 应用:软件包包含至少 10 MB 的 DEX 代码(以未压缩大小衡量)
  • 游戏:软件包包含至少 50 MB 的 DEX 代码(以未压缩大小衡量)

Android Vitals 会显示应用的 DEX 大小,但您也可以使用命令行在本地测量此大小:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

如需检查 Android Vitals 用于计算得分的确切元数据,请从 app bundle 中提取 r8.json 文件:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json