Устранение неполадок производительности сборки с помощью Build Analyzer

Используйте анализатор сборки, чтобы проверить производительность сборки вашего проекта. Для каждой выполняемой вами сборки анализатор сборки пытается предоставить наиболее важную информацию, чтобы вы могли быстро выявить и устранить проблемы с производительностью сборки.

Дополнительные стратегии по повышению производительности сборки см. в разделе Оптимизация скорости сборки .

Начать

Каждый раз, когда вы создаете приложение, анализатор сборки создает отчет и отображает данные из последнего отчета в окне сборки .

Для начала действуйте следующим образом:

  1. Если вы еще этого не сделали, создайте свое приложение одним из следующих способов:
    • Нажмите «Создать» > «Создать проект» в строке меню.
    • Чтобы создать пакет Android App Bundle или APK, в меню выберите «Сборка» > «Сборка пакетов» / «APK» > «Сборка пакетов» или «Сборка» > «Сборка пакетов» / APK(s) > «Создать APK». бар.
  2. Чтобы открыть окно «Сборка» , выберите «Просмотр» > «Окна инструментов» > «Создать» в строке меню.
  3. Чтобы просмотреть отчет о сборке в анализаторе сборки , щелкните вкладку «Анализатор сборки» в окне «Сборка» .

Данные, представляемые анализатором сборки, могут меняться в разных сборках, поэтому полезно собрать проект несколько раз и сравнить данные для выявления закономерностей.

Просмотр плагинов с задачами, определяющими продолжительность сборки

Когда вы впервые открываете анализатор сборки после завершения сборки, в окне отображается обзор анализа сборки, как показано на рисунке 1.

Рис. 1. Обзорная страница Build Analyzer дает сводку результатов.

Чтобы просмотреть разбивку плагинов с задачами, определяющими продолжительность сборки, нажмите «Плагины с задачами, влияющими на продолжительность сборки» на странице обзора. Вы также можете выбрать «Задачи» из раскрывающегося списка и подтвердить группировку по плагину. На графике плагины и связанные с ними задачи упорядочены по общему времени, затраченному на их выполнение.

Рисунок 2. Анализатор сборки предоставляет разбивку плагинов, влияющих на продолжительность сборки.

Просмотр задач, определяющих продолжительность сборки

Чтобы просмотреть разбивку задач, влияющих на продолжительность сборки, нажмите «Задачи, влияющие на продолжительность сборки» на странице обзора или выберите «Задачи» в раскрывающемся списке. Если в вашем проекте используется AGP 8.0 или выше, задачи по умолчанию сгруппированы по категориям, поэтому легче определить области, влияющие на продолжительность сборки. Нажмите на каждую дочернюю задачу, чтобы узнать больше о ее выполнении.

Рисунок 3. Анализатор сборки предоставляет разбивку задач, наиболее ответственных за продолжительность сборки.

Проверка предупреждений

Если анализатор сборки обнаруживает, что некоторые задачи можно настроить для более эффективного выполнения, он выдает предупреждение. Чтобы просмотреть все предупреждения, которые анализатор сборки обнаружил для вашей сборки, нажмите « Все предупреждения» на странице обзора или выберите «Предупреждения» в раскрывающемся списке.

В некоторых предупреждениях есть ссылка «Создать отчет» , как показано на рис. 4. При нажатии ссылки «Создать отчет» появляется диалоговое окно с дополнительной информацией, которая может помочь разработчику плагина решить проблему в новой версии плагина. Нажмите «Копировать» , чтобы сохранить текст в буфер обмена, чтобы вам было легче вставить информацию в отчет об ошибке разработчику плагина.

Рисунок 4. Подробная информация о предупреждениях Build Analyser.

Типы предупреждений

Анализатор сборки сообщает о следующих типах предупреждений:

  • Всегда запускать задачи : постоянно выполняемая задача заставляет другие задачи запускаться при каждой сборке, что не является необходимым. Существует две основные причины, по которым вы можете увидеть это предупреждение:

    • (Более распространенное явление) Вы неправильно определили входные и выходные данные задачи. В этом случае вам следует правильно объявить входные и выходные данные для ваших задач . Это означает самостоятельное объявление входных и выходных данных там, где это возможно, или изменение версий плагинов, если задачи, вызывающие предупреждение, относятся к сторонним плагинам.

    • (Менее распространено) Для параметра upToDateWhen установлено значение false, чего следует избегать. Возможно, существует какая-то логика, которая оценивается как ложная, или что upToDateWhen жестко запрограммировано как ложное. Если существует логика, которая оценивается как ложная, такой результат может быть преднамеренным, и вы можете проигнорировать предупреждение. Если upToDateWhen жестко запрограммировано значение false, вам следует удалить жесткое кодирование из вашего кода.

  • Проблемы с настройкой задач . Это предупреждение генерируется для задач, которые объявляют тот же каталог, что и выходные данные. Это означает, что выходные данные этих задач, скорее всего, не сохраняются между сборками, и эти задачи всегда выполняются, даже если нет никаких изменений. Чтобы устранить это предупреждение, вам следует объявить разные выходные каталоги для ваших задач . Это означает самостоятельное объявление различных выходных каталогов, где это возможно, или изменение версий плагинов, если задачи, вызывающие предупреждение, относятся к сторонним плагинам.

  • Неинкрементный обработчик аннотаций: это предупреждение генерируется в ситуациях, когда обработчик аннотаций не является инкрементным и приводит к тому, что задача JavaCompile всегда выполняется неинкрементно. Чтобы устранить это предупреждение, переключитесь на обработчик инкрементных аннотаций .

  • Кэш конфигурации. Это предупреждение отображается, если для вашего проекта не включено кэширование конфигурации . Анализатор сборки выполняет последовательность сборок, чтобы проверить, совместим ли ваш проект с кэшированием конфигурации. Если проверки совместимости пройдены успешно, вы можете включить кэширование конфигурации с помощью анализатора сборки.

  • Проверить Jetifier: это предупреждение отображается, если флаг enableJetifier присутствует и включен в вашем проекте; то есть, если у вас есть android.enableJetifier=true в вашем файле gradle.properties . Анализатор сборки может проверить, можно ли безопасно удалить этот флаг, чтобы ваш проект мог повысить производительность сборки и перейти от неподдерживаемых библиотек поддержки Android.

Проверьте влияние загрузки

Build Analyzer предоставляет сводную информацию о времени, затраченном на загрузку зависимостей, и подробное представление загрузок по репозиторию. Чтобы проверить влияние загрузок, выберите «Загрузки» в раскрывающемся списке. Эта информация также доступна в окне синхронизации .

Эту информацию можно использовать, чтобы определить, оказывают ли неожиданные загрузки зависимостей негативное влияние на производительность сборки. Это особенно важно во время инкрементных сборок, которые не должны постоянно загружать артефакты.

В частности, вы можете использовать эту информацию для выявления проблем с конфигурацией, таких как использование динамических версий зависимостей, которые вызывают непредвиденные загрузки. Кроме того, если вы видите большое количество неудачных запросов к определенному репозиторию, это может указывать на то, что репозиторий следует удалить или переместить ниже в конфигурации вашего репозитория.

Рисунок 5. Анализатор сборки показывает влияние загрузок на продолжительность сборки.

[Только для Windows] Проверка влияния антивирусного программного обеспечения

Анализатор сборки сообщает вам, может ли антивирусное программное обеспечение влиять на производительность сборки. Это может произойти, если антивирусное программное обеспечение, такое как Защитник Windows, выполняет сканирование каталогов, используемых Gradle, в режиме реального времени. Анализатор сборки рекомендует список каталогов, которые следует исключить из активного сканирования, и, если возможно, предлагает ссылку для добавления их в список исключений папок Защитника Windows.