使用 R8 或替代工具(例如 ProGuard 兼容的优化器或辅助 DEX 后处理器)优化和混淆代码,可减小应用的 DEX 大小、提升运行时性能并最大限度地减少其内存占用。
DEX(即 Dalvik Executable)文件包含用于运行应用的已编译代码。这通常包括 Java 和 Kotlin 代码,而不是已编译的 C++ 代码或 .so 文件。
在本地衡量 R8 代码优化效果
如需使用命令行在本地测量应用包的未压缩 DEX 大小,请运行:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
如果您的应用使用 R8 进行优化,您可以使用 R8 配置分析器来衡量应用软件包的优化、混淆和缩减情况。如需详细了解压缩、优化和混淆处理,请参阅使用 R8 配置分析器。R8 配置分析器报告也包含在 R8 分析器技能中。
如需检查嵌入在应用 bundle 中的优化后元数据(适用于 AGP 版本 8.10 或更高版本),请提取 r8.json 文件:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
解决问题
如需解决 DEX 代码优化得分偏低的问题,请根据您的 build 系统和优化器查看以下建议:
Android Gradle 插件和 R8
如需提高 R8 DEX 代码优化得分,请参阅改进 R8 优化中的指南。您还可以使用 R8 分析器技能,获取有关优化应用保留规则的更多指导。
非 R8 构建系统和 DEX 后处理器
如果您的 build 流水线使用自定义 build 工具或辅助 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 规则。 - 请注意,库使用方 keep 规则可能不太容易识别。如果您怀疑某个库使用方规则会影响优化,可以将其添加到使用最新版 AGP 的独立示例应用中,并使用 R8 配置分析器检查该规则,从而在本地进行验证。