Не так давно я уже делал пост о том, как в Gradle можно использовать переменные для версий библиотек. В этом посте я хотел бы развить тему и предложить еще более удобное решение.
Секция dependencies может выглядеть так:

Кратко, лаконично, без версий или конкатенаций строк.
Давайте смотреть, как это реализуется.
Открываем основной файл build.gradle проекта (не модуля).
В нем сначала создаем список версий всех используемых библиотек
ext.versions = [
dagger: "2.11",
androidSupport: "26.1.0",
constraintLayout: "1.0.2",
rxJava2: "2.1.3",
rxAndroid: "2.0.1",
butterKnife: "8.8.1",
room: "1.0.0-alpha9-1"
]
Далее в этом же файле будем создавать отдельный список зависимостей для каждой библиотеки.
Обычно зависимость состоит их трех компонентов:
<group>:<name>:<version>
И часто бывает так, что для одной библиотеки мы с одной group используем несколько name.
<group>:<name1>:<version> <group>:<name2>:<version> <group>:<name3>:<version>
Для каждой group будем создавать отдельный список, внутри которого будут перечислены name
ext.group = [
name1: "<group>:<name1>:<version>",
name2: "<group>:<name2>:<version>",
name3: "<group>:<name3>:<version>"
]
Рассмотрим на примере room зависимостей.
android.arch.persistence.room:runtime:1.0.0-alpha9-1 android.arch.persistence.room:rxjava2:1.0.0-alpha9-1 android.arch.persistence.room:compiler:1.0.0-alpha9-1
Здесь:
group = android.arch.persistence.room
name1 = runtime
name2 = rxjava2
name3 = compiler
version = 1.0.0-alpha9-1
Соответственно, список зависимостей room (в основном файле build.gradle проекта) будет выглядеть так:
ext.room = [
runtime: "android.arch.persistence.room:runtime:$versions.room",
rxjava2: "android.arch.persistence.room:rxjava2:$versions.room",
compiler: "android.arch.persistence.room:compiler:$versions.room"
]
В качестве имени списка мы используем не название group полностью (android.arch.persistence.room), а последнюю его часть - room.
В качестве имен элементов списка используем name1, name2 и name3.
Версии берем из общего списка versions.
После этого в build.gradle файлах модулей мы можем прописать room зависимости следующим образом:
dependencies {
// ...
// Room
compile room.runtime
compile room.rxjava2
annotationProcessor room.compiler
}
В итоге, все версии хранятся в одном списке, а зависимости в gradle файлах выглядят короче и читабельней.
Приведу еще несколько примеров списков из основного файла build.gradle проекта :
ext.support = [
appcompat7: "com.android.support:appcompat-v7:$versions.androidSupport",
support4: "com.android.support:support-v4:$versions.androidSupport",
design: "com.android.support:design:$versions.androidSupport",
recyclerview: "com.android.support:recyclerview-v7:$versions.androidSupport",
constraintLayout: "com.android.support.constraint:constraint-layout:$versions.constraintLayout"
]
ext.dagger = [
dagger: "com.google.dagger:dagger:$versions.dagger",
daggerCompiler: "com.google.dagger:dagger-compiler:$versions.dagger"
]
ext.rxjava2 = [
rxjava: "io.reactivex.rxjava2:rxjava:$versions.rxJava2",
rxandroid: "io.reactivex.rxjava2:rxandroid:$versions.rxAndroid",
]
ext.jakewharton = [
butterknife: "com.jakewharton:butterknife:$versions.butterKnife",
butterknifeCompiler: "com.jakewharton:butterknife-compiler:$versions.butterKnife"
]
А dependencies в build.gradle модулей будут выглядеть так:
dependencies {
// ...
// Android support
compile support.appcompat7
compile support.support4
compile support.constraintLayout
compile support.recyclerview
compile support.design
// ButterKnife
compile jakewharton.butterknife
annotationProcessor jakewharton.butterknifeCompiler
// RxJava
compile rxjava2.rxjava
compile rxjava2.rxandroid
// Dagger
compile dagger.dagger
annotationProcessor dagger.daggerCompiler
}
В этом посте я изложил свое видение удобной организации зависимостей. Но вы можете организовать все так, как вам удобнее.
Присоединяйтесь к нам в Telegram:
- в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance
- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

Комментарии
Мне кажется, что Gradle находится ближе к концу списка приоритетов. Лучше тратить время на изучение всевозможных даггеров, корутин, анимации, паттернов, SOLID и пр.
А вот потом уже можно и Gradle
RSS лента комментариев этой записи