测试和排查优化问题

启用应用优化后,请检查您的应用是否按预期运行以及 R8 配置是否符合您的预期。一般步骤如下:

  1. 测试您应用的典型用户旅程 (CUJ):例如,确保用户可以登录并执行其他重要任务。
  2. 使用基准衡量性能提升:在启用应用优化前后,对您的应用进行基准测试

如果您发现问题,R8 提供工具帮助您排查。如果您无法解决 R8 相关问题,请提交错误报告

一般提示

R8 相关问题通常是您应用特有的,但这里有一些通用提示可以使调试更轻松

  • 暂时关闭混淆:R8 会在优化过程中对代码进行混淆。混淆通常不是错误的原因,但会使错误更难调试。将 ‑dontobfuscate‑dontoptimize 标志添加到保留规则文件中,以帮助您查明有问题的代码。
  • 检查反射:如果您遇到“no such element”异常,例如

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

    此异常通常意味着相关字段通过反射使用,您需要添加一条保留规则。

  • 检查字节码:大多数 R8 问题需要检查字节码,您可以使用 APK 分析器等工具来完成。

检查应用的规则

如需输出 R8 在构建项目时应用的所有规则的完整报告,请在应用的模块 proguard‑rules.pro 文件中添加以下内容

-printconfiguration <output-dir>/<report-name>.txt

您可以指定任何路径和文件名。如果您未指定路径或文件名,R8 会将规则报告输出到 <module-name>/build/outputs/mapping/<build-type>/configuration.txt

了解代码为何被保留

如果您看到本应移除但却被保留的代码,请使用配置选项 ‑whyareyoukeeping 来帮助理解代码被保留的原因。R8 会从被保留的代码输出到您应用的某个入口点的路径。如需了解详情,请参阅 Proguard 手册中关于 ‑whyareyoukeeping 的文档。

恢复原始堆栈轨迹

R8 处理过的代码会以各种方式更改,因此堆栈轨迹不再指向原始代码。例如,行号以及类和方法的名称可能会更改。要恢复原始堆栈轨迹,R8 提供了 retrace 命令行工具,该工具与命令行工具软件包捆绑在一起。

要使用 retrace,请为其提供映射文件和堆栈轨迹文件。映射文件(名为 mapping.txt)会自动随 Android App Bundle (AAB) 捆绑。如需了解更多详情,请参阅 retrace 文档和 Play 管理中心帮助文章,了解如何对崩溃堆栈轨迹进行反混淆