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

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

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

开始使用

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

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

  1. 如果您尚未执行此操作,请通过以下方式之一构建您的应用
    • 从菜单栏中点击**构建 > 生成项目**。
    • 要构建 Android 应用包或 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 文件夹排除列表中。