Прочитав этот пост вы узнаете как правильно и легко управлять списком зависимостей, номерами версий библиотек и другими параметрами, доступными в build.gradle.
Проблема
Наверняка вы замечали, когда необходимо обновить одну библиотеку, потом другую, третью и вот у вас уже целый зоопарк разных библиотек с разными версиями. Еще хуже, когда у вас одни и те же библиотеки в разных проектах/модулях с разными номерами версий. Со временем в крупном проект файл с зависимостями build.gradle разрастается до огромных размеров и поддерживать это становится сложно – постоянно появляются какие то дублирования, конфликты версий… бррр Хочется, чтобы версии библиотек были вынесены в константы – чтобы не приходилось менять 100500 раз в разных местах, а список зависимостей проекта – можно было просмотреть за секунду в одном месте. Сейчас расскажу и покажу как это сделать.
Создаем файл dependencies.gradle
Сначала, создадим файл, в котором будем хранить все константы и названия библиотек dependencies.gradle. В проекте на том же уровне, где и находится top-level build.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.gradle уровня проекта.
Ну вот и все, всего несколько простых шагов и теперь ориентироваться в проекте в build.gradle гораздо проще. Нет конфликтов, номера версий и библиотеки в одном месте. Единственный минус такого подхода, что если какая-либо библиотека обновится – то AndroidStudio в данном случае не сможет вам оперативно об этом напомнить, как если бы мы добавляли зависимости обычным способом. Но на самом деле – узнать о выходе новой версии библиотеки и обновить ее вручную – гораздо проще чем ориентироваться в огромном списке зависимостей, тем более, если у вас многомодульный проект.