fbpx

Blog

Наводим порядок в build.gradle

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

Проблема

Наверняка вы замечали, когда необходимо обновить одну библиотеку, потом другую, третью и вот у вас уже целый зоопарк разных библиотек с разными версиями. Еще хуже, когда у вас одни и те же библиотеки в разных проектах/модулях с разными номерами версий. Со временем в крупном проект файл с зависимостями build.gradle разрастается до огромных размеров и поддерживать это становится сложно – постоянно появляются какие то дублирования, конфликты версий… бррр Хочется, чтобы версии библиотек были вынесены в константы – чтобы не приходилось менять 100500 раз в разных местах, а список зависимостей проекта – можно было просмотреть за секунду в одном месте. Сейчас расскажу и покажу как это сделать.

Создаем файл dependencies.gradle

Сначала, создадим файл, в котором будем хранить все константы и названия библиотек dependencies.gradle. В проекте на том же уровне, где и находится top-level build.gradle – файл нужно создать файлик dependencies.gradle.

Создаем файл dependencies.gradle

Разбиваем на массив версий и названий библиотек

В файле dependencies.gradle теперь необходимо прописать все номера версий библиотек или, например minSdk, targetSdk вашего приложения. Версии и названия библиотек будем записывать в ext. ext – кратко от  project.ext, и используется для определения дополнительных свойств объекта project, который создается при сборке проекта через gradle.

Например, список версий может выглядеть так:

ext.versions = [
        minSdk                : 21,
        targetSdk             : 28,
        compileSdk            : 28,
        buildTools            : '28.0.3',

        constraintLayout      : '1.1.0',
        dagger                : '2.23.2'
]

Кроме списка версий, необходимо добавить и названия библиотек. Обратите внимание, что здесь мы ссылаемся на номер версии через $versions.dagger – это как раз значение из списка выше 2.23.2

ext.libraries = [
   dagger : "com.google.dagger:dagger:$versions.dagger"
]

Тоже самое делаем с названием плагинов

ext.gradlePlugins = [
android : "com.android.tools.build:gradle:$versions.androidGradlePlugin",
kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin",
googleServices: "com.google.gms:google-services:$versions.googleServices"
]

Добавляем файл с названиями зависимостей и констант в корневой build.gralde

Добавляем файл с названиями зависимостей и констант в корневой build.gralde

Ссылаемся на номер версии или библиотеку в build.gradle уровня проекта.

Ссылаемся на номер версии или библиотеку в build.gradle уровня проекта.

Ну вот и все, всего несколько простых шагов и теперь ориентироваться в проекте в build.gradle гораздо проще. Нет конфликтов, номера версий и библиотеки в одном месте. Единственный минус такого подхода, что если какая-либо библиотека обновится – то AndroidStudio в данном случае не сможет вам оперативно об этом напомнить, как если бы мы добавляли зависимости обычным способом. Но на самом деле – узнать о выходе новой версии библиотеки и обновить ее вручную – гораздо проще чем ориентироваться в огромном списке зависимостей, тем более, если у вас многомодульный проект.