Плагин Gradle для анализа зависимостей (DAGP, урожденный плагин Dependency Analysis Android Gradle) обнаруживает следующее:
Неиспользуемые зависимости.
Используются транзитивные зависимости (которые вы можете объявить напрямую).
Зависимости, объявленные в неправильной конфигурации ( api
, implementation
, compileOnly
и т. д.).
В качестве побочного эффекта плагин также может сообщать вам ABI вашего проекта и, среди прочего, создавать файлы графвизов, представляющие различные представления вашего графа зависимостей. Эти побочные эффекты в настоящее время в основном представляют собой недокументированное внутреннее поведение, но они могут быть интересны некоторым опытным пользователям.
В дополнение к советам, связанным с зависимостями (см. выше), DAGP предоставляет и другие советы, которые помогут поддерживать «здоровье сборки». Сюда входит выявление:
Ненужные плагины (на данный момент только kapt
).
Подпроекты («модули»), которые без необходимости используют плагин Android и вместо этого могут использовать «обычные» библиотеки JVM.
Пожалуйста, посетите вики для получения информации о версиях Gradle, плагине Android Gradle и т. д., с которыми совместим этот плагин.
Подробные инструкции смотрите в вики.
Самый простой подход — добавить следующее:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
Важный | Если ваш проект использует Kotlin или Android (или оба), то эти плагины также должны быть загружены в загрузчик классов скрипта настроек (или родительский). Смотрите вики для получения дополнительной информации |
Для быстрого старта просто запустите следующее:
./gradlew buildHealth
Вероятно, вы увидите следующий вывод:
> Задача: buildHealth ОШИБКА ОШИБКА: сборка не удалась с исключением. * Что пошло не так: Не удалось выполнить задачу «:buildHealth». > Были нарушения зависимости. См. отчет в файле:///path/to/project/build/reports/dependent-anaанализ/build-health-report.txt.
Если вы хотите, чтобы этот (потенциально очень длинный) отчет был напечатан на консоли, добавьте его в свой файл gradle.properties
:
dependency.analysis.print.build.health=true
Вам не обязательно применять этот плагин ко всем проектам через скрипт настроек. Его также можно применять только к конкретным подпроектам. В этом случае его также необходимо применить к корневому сценарию сборки.
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
Важный | Если ваш проект использует Kotlin или Android (или оба), то эти плагины также должны быть загружены в корневой загрузчик классов сценария сборки (или родительский). Смотрите вики для получения дополнительной информации |
Анализ можно запустить для отдельных модулей с помощью задачи projectHealth
. Например:
./gradlew приложение:projectHealth
Плагин обычно сообщает о многих проблемах с объявлениями зависимостей вашего проекта. Поскольку исправление вручную может быть утомительным, плагин также предоставляет задачу автоматического устранения всех проблем.
./gradlew fixЗависимости
Задача fixDependencies
регистрируется в каждом проекте, в котором применяется плагин. Запуск его, как указано выше, приведет к запуску задачи в каждом подпроекте. См. также Исправление зависимостей одним щелчком мыши .
В некоторых случаях может оказаться невозможным решить все проблемы за один проход. Возможно, у вас очень большой проект или вы публикуете библиотеки и знаете, что изменение объявлений зависимостей также приведет к изменению метаданных ваших библиотек, что может нарушить работу потребителей. Для поддержки этого варианта использования задача fixDependencies
принимает необязательный флаг, указывающий ей, по сути, вносить только «безопасные» изменения.
./gradlew fixDependities --upgrade
При наличии этого флага задача fixDependencies
не будет удалять или «понижать» какие-либо объявления зависимостей. Он будет только добавлять или «обновлять» объявления (например, с implementation
на api
).
В сценарии постепенного развертывания можно представить использование флага --upgrade
, затем обновление всех потребителей, а затем окончательное удаление флага и удаление всех неиспользуемых зависимостей.
Если в анализе есть какие-либо ошибки, то исправление объявлений зависимостей приведет к поломке вашей сборки (но это также относится и к ручным исправлениям). Если вы столкнулись с этим, пожалуйста, сообщите о проблеме.
Кроме того, функциональность перезаписи основана на упрощенной грамматике Gradle Groovy/Kotlin DSL, которая не работает при наличии сложных сценариев сборки. Мы планируем в ближайшее время улучшить грамматику Gradle Kotlin DSL, поскольку это язык сценариев сборки по умолчанию, но в настоящее время у нас нет планов делать то же самое для Gradle Groovy DSL.
Вам может быть интересно, почему плагин выдает (или не выдает) советы относительно некоторых зависимостей. Вы можете спросить, почему:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > Задача :lib:причина ---------------------------------------- Вы спросили о зависимости «com.squareup.okio:okio:2.2.2». Никаких советов по поводу этой зависимости нет. ---------------------------------------- Кратчайший путь от :lib до com.squareup.okio:okio:2.2.2: :либ --- com.squareup.okio:okio:2.2.2 Источник: основной ------------ * Предоставляет класс okio.BufferedSource (подразумевает API).
Строка версии не является обязательной.
Подробную информацию о том, как настроить плагин, смотрите в вики.
Для настройки плагина используйте расширение dependencyAnalysis
.
dependencyAnalysis {
// configuration goes here
}
Ниже приводится список статей/сообщений в блогах, которые были опубликованы, обсуждая этот плагин:
Правильный уход и питание вашей сборки Gradle
Плагин Gradle для анализа зависимостей: использование анализа байт-кода для поиска неиспользуемых зависимостей.
Плагин Gradle для анализа зависимостей: что такое ABI?
Уменьшение влияния моего плагина Gradle на время настройки: путешествие
Исправление зависимостей в один клик
…и ещё больше :)
Этот плагин также упоминался в следующих информационных бюллетенях:
Градл, октябрь 2024 г.
Градл, май 2022 г.
Градл, сентябрь 2020 г.
Градл, август 2020 г.
Еженедельник Android, выпуск № 423
Градл, июль 2020 г.
Градл, июнь 2020 г.
Эпизоды подкаста об этом плагине можно найти здесь:
Пекарня разработчиков, серия №31
Видео на YouTube об этом плагине:
Понимание Gradle № 28 – Очистка путей к классам компиляции с помощью плагина анализа зависимостей