Не так давно я уже делал пост о том, как в 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 лента комментариев этой записи