Не так давно я уже делал пост о том, как в 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Евгений 27.09.2022 03:07
Проясните один момент пожалуйста - многие работадатели прописывают среди требований к кандидатам на вакансии знания системы сборки gradle, насколько мне известно, это достаточно могучий инструмент, так вот насколько глубоки должны быть знания системы сборки для работы разработчиком? Достаточно ли знать её часть в контексте студии или это зависит от проекта?
# RE: GradleDmitry Vinogradov 30.09.2022 15:36
Зависит от проекта. Где-то пишут кучу кода на Gradle, где-то только dependencies добавляют.

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

Language

Автор сайта

Дмитрий Виноградов

Подробнее можно посмотреть или почитать.

Никакие другие люди не имеют к этому сайту никакого отношения и просто занимаются плагиатом.

Социальные сети

 

В канале я публикую ссылки на интересные и полезные статьи по Android

В чате можно обсудить вопросы и проблемы, возникающие при разработке



Группа ВКонтакте



Поддержка проекта

Яндекс
410011180491924

WebMoney
R248743991365
Z551306702056

Paypal