Как работать с зависимостями Gradle в Android Studio

В двух предложениях: подключайте библиотеки через блок dependencies в build.gradle(.kts), обновляйте через плагины (versions, BOM) и централизованное управление (Version Catalog), а конфликты решайте через exclusion, force или resolutionStrategy — и диагностируйте через ./gradlew :dependencies.

Работа с зависимостями — это набор повторяемых действий: найти координату, добавить её в модуль, синхронизировать, протестировать. Ниже — краткие пошаговые инструкции и готовые команды.

Оглавление {{TOC_AUTOMATIC}}

Как подключать библиотеки

  1. Найдите координату (group:artifact:version) в документации библиотеки.
  2. Убедитесь, что в корне подключены репозитории (settings.gradle.kts или build.gradle.kts): google(), mavenCentral().
  3. Добавьте зависимость в модуль (рекомендуется 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")
}
  1. Нажмите "Sync Project with Gradle Files" и выполните Build > Make Project.
  2. Проверьте, что библиотека видна в 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. Обновляйте 1–2 библиотеки за раз.
    2. Читайте changelog и тесты CI/локальные тесты.
    3. Если сломалось — откат через 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

Основные способы решения:

  1. Принудительная версия (force):
dependencies {
    implementation("com.google.code.gson:gson:2.10.1")
}
configurations.all {
    resolutionStrategy {
        force("com.google.code.gson:gson:2.10.1")
    }
}
  1. Исключение транзитивных зависимостей:
implementation("some.library:artifact:1.0") {
    exclude(group = "com.google.code.gson", module = "gson")
}
  1. BOM и единая точка версионирования для модульных наборов.
  2. Централизация версий через 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 и дерево зависимостей, это ускорит диагностику. Удачной разработки!