Как работать с зависимостями Gradle в Android Studio
В двух предложениях: подключайте библиотеки через блок dependencies в build.gradle(.kts), обновляйте через плагины (versions, BOM) и централизованное управление (Version Catalog), а конфликты решайте через exclusion, force или resolutionStrategy — и диагностируйте через ./gradlew
Работа с зависимостями — это набор повторяемых действий: найти координату, добавить её в модуль, синхронизировать, протестировать. Ниже — краткие пошаговые инструкции и готовые команды.
Оглавление {{TOC_AUTOMATIC}}
Как подключать библиотеки
- Найдите координату (group:artifact:version) в документации библиотеки.
- Убедитесь, что в корне подключены репозитории (settings.gradle.kts или build.gradle.kts): google(), mavenCentral().
- Добавьте зависимость в модуль (рекомендуется Kotlin DSL):
dependencies {
implementation("androidx.core:core-ktx:1.13.1")
implementation("com.squareup.retrofit2:retrofit:2.11.0")
implementation("com.squareup.retrofit2:converter-gson:2.11.0")
}
- Нажмите "Sync Project with Gradle Files" и выполните Build > Make Project.
- Проверьте, что библиотека видна в Project Structure > Dependencies и работает в рантайме.
Используйте Kotlin DSL (build.gradle.kts): автодополнение и меньше синтаксических ошибок.
Как обновлять зависимости безопасно
Автоматизация и поэтапность — ключи к успешному обновлению.
-
Инструменты:
- Плагин versions (com.github.ben-manes.versions) для отчёта: ./gradlew dependencyUpdates
- AGP Upgrade Assistant в Android Studio для обновления плагина Gradle/AGP.
- BOM для согласованных версий наборов (например, для Firebase): implementation(platform("com.google.firebase:firebase-bom:VERSION")).
- Version Catalog (libs.versions.toml) для централизованного управления версиями.
-
Процесс:
- Обновляйте 1–2 библиотеки за раз.
- Читайте changelog и тесты CI/локальные тесты.
- Если сломалось — откат через VCS.
Пример использования плагина в root build.gradle.kts:
plugins {
id("com.github.ben-manes.versions") version "0.51.0"
}
Запуск: ./gradlew dependencyUpdates
Не апгрейдьте всё сразу на продакшне — делайте поэтапно и с тестами.
Как диагностировать и решать конфликты Gradle
Типичные симптомы: Duplicate class, NoSuchMethodError, Version mismatch, Resolution failed.
Шаги диагностики:
- Просмотрите дерево зависимостей: ./gradlew :app:dependencies --configuration implementation
- Соберите с --stacktrace для подробностей: ./gradlew assembleDebug --stacktrace
Основные способы решения:
- Принудительная версия (force):
dependencies {
implementation("com.google.code.gson:gson:2.10.1")
}
configurations.all {
resolutionStrategy {
force("com.google.code.gson:gson:2.10.1")
}
}
- Исключение транзитивных зависимостей:
implementation("some.library:artifact:1.0") {
exclude(group = "com.google.code.gson", module = "gson")
}
- BOM и единая точка версионирования для модульных наборов.
- Централизация версий через libs.versions.toml или buildSrc, чтобы избежать разбежки версий.
Техническая команда для просмотра конфликта версий:
- ./gradlew :app:dependencies --configuration implementation
Таблица — типичные конфликты и быстрые решения
| Конфликт | Причина | Решение |
|---|---|---|
| Разные версии Gson | Транзитивные зависимости тянут разные версии | force("com.google.code.gson:gson:2.10.1") или exclude и добавление нужной версии |
| Kotlin stdlib mismatch | Разные kotlin_version в модулях | Синхронизировать kotlin_version в root |
| OkHttp vs Glide/Coil | Дублирование транспорта | Исключить okhttp из одного модуля или выровнять версии |
| Firebase модулей | Несогласованные версии модулей | Использовать Firebase BOM |
Частые ошибки
- Не синхронизировали репозитории в settings.gradle.kts → Resolution failed.
- Апдейтили много библиотек сразу → неясно, что сломало сборку.
- Используют api вместо implementation без необходимости → вырос размер APK и больше транзитивных конфликтов.
- Копирование строк из интернета без проверки версии и совместимости с AGP/Kotlin.
FAQ
-
Как быстро увидеть, какая библиотека тянет конфликтующую зависимость?
- Запустите ./gradlew :app:dependencies и найдите в дереве источник версии.
-
Когда лучше использовать BOM?
- Когда библиотека предоставляет набор модулей (например, Firebase), и важно согласованное версионирование.
-
Стоит ли всегда использовать force?
- Нет. force — крайняя мера; сначала пробуйте exclude и унификацию через Catalog/BOM.
-
Как управлять версиями во множестве модулей?
- Version Catalog (libs.versions.toml) или buildSrc — центральное место для версий и артефактов.
Утилиты, команды и шаблоны из этой статьи помогут быстро подключать библиотеки, аккуратно обновлять версии и решать конфликты. Если конкретный конфликт не устраняется — приложите вывод ./gradlew build --stacktrace и дерево зависимостей, это ускорит диагностику. Удачной разработки!