Google 致力于为黑人社区推动种族平等。查看具体举措

排查构建性能问题

在已安装 Android Gradle 插件 4.0.0 及更高版本的 Android Studio 4.0 及更高版本中,您可通过 Build Analyzer 检查项目的构建性能。构建性能可能会受多种不同的因素影响,这些因素因构建配置而异。对于您执行的每项构建,Build Analyzer 都会尝试显示其最重要的信息,以便您快速找出影响构建性能的回归问题并予以解决。

本页面简要介绍了 Build Analyzer,并就如何使用该工具提升项目的构建性能提供了一些指导。如果您还未尝试过提升构建性能,请参阅优化构建速度,了解有助于提升构建性能的其他策略。

分析器显示的数据因具体构建操作而异。特别是在复杂的大型构建操作中,许多因素都会因构建操作而异,这些因素会导致分析器以影响构建时长的重要因素呈现给您的数据有所变化。因此,最好多次构建项目并在分析器中对比数据以确定使用何种模式。

开始使用

在您每次构建应用时,Build Analyzer 都会生成一份报告,并在 Build 窗口中显示最新报告中的数据。如需开始使用,请按以下步骤操作:

  1. 确保您使用的是已安装 Android Gradle 插件 4.0.0 及更高版本的最新版 Android Studio。
  2. 如果您尚未构建应用,请采用以下其中一种方法构建应用:
    • 从菜单栏中依次点击 Build > Make Project
    • 从菜单栏中依次点击 Build > Build Bundle(s) / APK(s) > Build Bundle(s)Build > Build Bundle(s) / APK(s) > Build APK(s),构建 Android App Bundle 或 APK。
  3. 从菜单栏中依次选择 View > Tool Windows > Build,打开 Build 窗口。
  4. Build 窗口中,点击 Build Analyzer 标签页以查看 Build Analyzer 中的构建报告。

图 1. Build Analyzer 显示对构建时长影响最大的插件的详情。

打开 Build Analyzer 后,相应窗口会显示对构建时长影响最大的插件的详情,以及有助于您浏览构建操作的其他实用数据的树状图,如图 1 所示。

请务必注意,Build Analyzer 不会全部显示构建操作中所有任务的数据。而是仅重点显示决定着总构建时长的任务。

哪些任务决定着构建时长?

Gradle 按任务的相互依赖性、项目结构和 CPU 负载来决定任务的执行方式,并按顺序或并行执行任务。对于给定的构建操作,Build Analyzer 会突出显示决定当前构建时长的一组按顺序执行的任务。如需缩短总构建时长,最好首先解决这些突出显示的任务执行效率低下的问题。

请注意,对于您执行的每项构建,您可能会看到一组不同的任务决定了构建时长。例如,如果您对构建配置进行更改、在构建过程中执行一组不同的任务(如增量构建)或在不同的约束条件(如较重的 CPU 负载)下运行构建操作,那么“Build Speed”窗口中突出显示的对构建时长影响最大的任务也会有所差异。由于这种差异,建议您执行多项构建并使用“Build Speed”窗口来持续监控,以切实缩短不同情况下的构建时长。

决定着构建时长的任务所属的插件

完成构建后首次打开 Build Analyzer 时,相应窗口会显示与决定着构建时长的任务所属的插件相关的数据,如图 1 所示。窗口的右侧会显示这些插件的直观分析图及其对构建时长的相对影响。这样,您就可以快速找出需要优先检查的插件。

在左侧窗格中,您可以展开 Plugins with tasks determining the build’s duration 旁边的节点,以查看 Build Analyzer 收集的每个插件的其他数据。例如,每个插件都包含一个子节点,该子节点对 Gradle 在上次构建期间执行的任务进行分组,而分析器则将其视为对总构建时长影响很大。每个节点都会显示执行其直属子节点所用的总时长。时长有助于您重点检查对构建时长影响最大的任务。

如果 Build Analyzer 断言可对某些任务进行配置以使其更高效地运行,它会将这些任务分组到标记为警告的节点下。您还可以展开左侧窗格底部附近的顶级警告节点,以检查构建过程中的所有警告。

决定着构建时长的任务

选中树状图中的 Tasks determining this build’s duration 节点时,Build Analyzer 会显示对构建时长影响最大的任务的直观分析图。也就是说,此节点不会按插件对任务进行分组,而是根据任务的执行时间对各项任务进行排序。

每项任务的颜色编码如下所示:

  • 粉色:相应任务属于 Android Gradle 插件、Java Gradle 插件或 Kotlin Gradle 插件。
  • 蓝色:相应任务属于第三方插件或自定义插件。例如,您在使用 Android Studio 创建新项目后所应用的插件。
  • 紫色:相应任务不属于插件,但用于在运行时动态修改项目属性。例如,您可能会在 build.gradle 文件中指定的任务。
  • 浅蓝色:与分析器突出显示的其他任务相比,相应任务对构建时长影响不大。

展开 Tasks determining this build’s duration 节点后,您可以点击各个子任务以详细了解其执行情况。分析器还会提供其他详细信息,例如父插件、任务类型、促使此任务运行的其他任务以及相应任务是否以增量方式执行,如图 2 所示。分析器可能还会显示有助于对相应任务进行配置以使其更高效地运行的警告。

图 2. Build Analyzer 显示执行的特定任务的相关详细信息。

检查警告

检测到可能未被配置为高效运行的任务时,Build Analyzer 会显示警告。例如,未使用合适的 Gradle API 来指定输入和输出的任务无法使用增量构建。 如果您的构建操作包含此类任务,Build Analyzer 可能会使用 Always-run 警告对其进行标记,因为每次构建时都必须执行这些任务,无论其输入是否发生变化。

如需查看分析器为您的构建标识的所有警告,请展开顶层 Warnings 节点。展开此节点后,您可以查看按类别分组的警告。例如,Always-run 节点会将分析器认为未针对增量构建正确配置的任务分为一组。

点击某个子节点后,分析器会描述警告的性质以及可解决相应问题的步骤。此外,如果相应任务属于您在项目中应用的某个插件,分析器会提供一个 Generate report 链接,如图 3 所示。

图 3. 有关 Build Analyzer 警告的详细信息。

点击 Generate report 链接后,系统会显示一个对话框,其中包含可能有助于插件开发者解决新版插件中问题的其他信息。您可以点击 Copy 以将文本复制到剪贴板,更轻松地将信息粘贴到给插件开发者的错误报告中。