Не так давно я уже делал пост о том, как в 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, Kotlin, RxJava, Dagger, Тестирование



Похожие статьи


Последние статьи



Language

Система Orphus

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

 

Telegram канал



Android чат в Telegram



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



Страница в Facebook

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

Яндекс
410011180491924

WebMoney
R248743991365
Z551306702056

Paypal

Яндекс.Метрика