使用构建分析器排查构建性能问题

使用构建分析器检查项目的构建性能。对于您执行的每个构建,构建分析器都会尝试呈现最重要的信息,以便您可以快速识别和解决构建性能的回归问题。

有关改进构建性能的其他策略,请阅读 优化构建速度

开始使用

每次构建应用时,构建分析器都会创建一份报告并在**构建**窗口中显示最新报告的数据。

要开始使用,请按以下步骤操作

  1. 如果您尚未执行此操作,请通过以下方式之一构建应用
    • 从菜单栏中点击**构建 > 生成项目**。
    • 要构建 Android App Bundle 或 APK,请从菜单栏中点击**构建 > 生成 Bundle/APK > 生成 Bundle**或**构建 > 生成 Bundle/APK > 生成 APK**。
  2. 要打开**构建**窗口,请从菜单栏中选择**查看 > 工具窗口 > 构建**。
  3. 要在**构建分析器**中查看构建报告,请点击**构建**窗口中的**构建分析器**选项卡。

构建分析器提供的数据可能会在构建之间发生变化,因此多次构建项目并比较数据以识别模式非常有用。

查看具有决定构建持续时间的任务的插件

完成构建后,第一次打开构建分析器时,窗口会显示构建分析的概述,如图 1 所示。

图 1. 构建分析器概述页面提供了结果摘要。

要查看具有决定构建持续时间的任务的插件的细分,请点击概述页面上的**影响构建持续时间的插件及其任务**。您也可以从下拉列表中选择**任务**,并确认您是按插件进行分组的。图表按完成所需总时间对插件及其相关任务进行排序。

图 2. 构建分析器提供了影响构建持续时间的插件的细分。

查看决定构建持续时间的任务

要查看导致构建持续时间的任务的细分,请点击概述页面上的**影响构建持续时间的任务**或从下拉列表中选择**任务**。如果您的项目使用 AGP 8.0 或更高版本,则默认情况下会按类别对任务进行分组,因此更容易识别影响构建持续时间的区域。点击每个子任务以了解有关其执行的更多信息。

图 3. 构建分析器提供了对构建持续时间最主要负责的任务的细分。

检查警告

如果构建分析器检测到某些任务可以配置为更有效地运行,则会提供警告。要查看构建分析器为您的构建识别到的所有警告,请点击概述页面上的**所有警告**或从下拉列表中选择**警告**。

某些警告会显示一个**生成报告**链接,如图 4 所示。当您点击**生成报告**链接时,会弹出一个对话框,其中包含可能帮助插件开发者在新版本插件中解决问题的其他信息。点击**复制**将文本保存到剪贴板,以便更轻松地将信息粘贴到发送给插件开发者的错误报告中。

图 4. 生成分析器警告的详细信息。

警告类型

生成分析器报告以下警告类型

  • 始终运行的任务:始终运行的任务会使其他任务在每次构建时都运行,这是不必要的。您可能会看到此警告主要有两个原因

    • (更常见) 您没有正确声明任务的输入和输出。如果是这种情况,您应该正确声明任务的输入和输出。这意味着在您可以的情况下自行声明输入和输出,或者如果触发警告的任务来自第三方插件,则更改插件版本。

    • (不太常见) 任务的 upToDateWhen 设置为 false,应避免这种情况。可能是某些逻辑计算结果为 false,或者 upToDateWhen 被硬编码为 false。如果存在逻辑计算结果为 false,则此结果可能是故意的,您可以选择忽略警告。如果 upToDateWhen 被硬编码为 false,则应从代码中删除硬编码。

  • 任务设置问题:对于声明相同目录作为输出的任务,会生成此警告。这意味着这些任务的输出很可能不会在构建之间保留,并且这些任务始终运行,即使没有更改也是如此。要解决此警告,您应该为任务声明不同的输出目录。这意味着在您可以的情况下自行声明不同的输出目录,或者如果触发警告的任务来自第三方插件,则更改插件版本。

  • 非增量注解处理器:在注解处理器是非增量且导致 JavaCompile 任务始终非增量运行的情况下,会生成此警告。要解决此警告,切换到增量注解处理器

  • 配置缓存:如果您的项目未启用配置缓存,则会显示此警告。生成分析器会遍历一系列构建,以检查您的项目是否与配置缓存兼容。如果兼容性检查成功,您可以从生成分析器中打开配置缓存。

  • 检查 Jetifier:如果您的项目中存在并启用了enableJetifier 标志,则会显示此警告;也就是说,如果您的 gradle.properties 文件中包含 android.enableJetifier=true。生成分析器可以执行检查以查看是否可以安全地移除此标志,以使您的项目获得更好的构建性能并迁移远离未维护的 Android Support 库。

检查下载影响

生成分析器提供了下载依赖项所花费时间的摘要以及每个存储库下载的详细视图。要检查下载的影响,请从下拉列表中选择**下载**。此信息也可在同步窗口中找到。

您可以使用此信息来确定意外的依赖项下载是否对构建性能产生负面影响。这在增量构建期间尤其重要,增量构建不应该始终下载工件。

具体来说,您可以使用此信息来识别配置问题,例如使用导致意外下载的依赖项的动态版本。此外,如果您看到特定存储库的失败请求数量很多,则可能表明应删除该存储库或将其在存储库配置中的位置下移。

图 5. 生成分析器显示下载对构建持续时间的影响。

[仅限 Windows] 检查防病毒软件的影响

生成分析器会通知您防病毒软件是否可能影响构建性能。如果防病毒软件(例如 Windows Defender)正在对 Gradle 使用的目录进行实时扫描,则可能会发生这种情况。生成分析器建议将一系列目录排除在主动扫描之外,并且如果可能,它会提供一个链接将它们添加到 Windows Defender 文件夹排除列表中。