Android Centralizzazione delle dipendenze tramite il file "dependencies.gradle"


Esempio

Quando si lavora con progetti multi-modulo, è utile centralizzare le dipendenze in una singola posizione piuttosto che distribuirle su molti file di build, specialmente per le librerie comuni come le librerie di supporto Android e le librerie Firebase .

Un modo consigliato è quello di separare i file di build di Gradle, con un build.gradle per modulo, nonché uno nella root del progetto e un altro per le dipendenze, ad esempio:

root
  +- gradleScript/
  |     dependencies.gradle
  +- module1/
  |     build.gradle
  +- module2/
  |     build.gradle
  +- build.gradle

Quindi, tutte le tue dipendenze possono trovarsi in gradleScript/dependencies.gradle :

ext {
    // Version
    supportVersion = '24.1.0'

    // Support Libraries dependencies
    supportDependencies = [
            design:            "com.android.support:design:${supportVersion}",
            recyclerView:      "com.android.support:recyclerview-v7:${supportVersion}",
            cardView:          "com.android.support:cardview-v7:${supportVersion}",
            appCompat:         "com.android.support:appcompat-v7:${supportVersion}",
            supportAnnotation: "com.android.support:support-annotations:${supportVersion}",
    ]

    firebaseVersion = '9.2.0';

    firebaseDependencies = [
            core:         "com.google.firebase:firebase-core:${firebaseVersion}",
            database:     "com.google.firebase:firebase-database:${firebaseVersion}",
            storage:      "com.google.firebase:firebase-storage:${firebaseVersion}",
            crash:        "com.google.firebase:firebase-crash:${firebaseVersion}",
            auth:         "com.google.firebase:firebase-auth:${firebaseVersion}",
            messaging:    "com.google.firebase:firebase-messaging:${firebaseVersion}",
            remoteConfig: "com.google.firebase:firebase-config:${firebaseVersion}",
            invites:      "com.google.firebase:firebase-invites:${firebaseVersion}",
            adMod:        "com.google.firebase:firebase-ads:${firebaseVersion}",
            appIndexing:  "com.google.android.gms:play-services-appindexing:${firebaseVersion}",
    ];
}

Quale può quindi essere applicato da quel file nel file di livello superiore build.gradle modo:

// Load dependencies
apply from: 'gradleScript/dependencies.gradle'

e nel module1/build.gradle modo:

// Module build file
dependencies {
    // ...
    compile supportDependencies.appCompat
    compile supportDependencies.design
    compile firebaseDependencies.crash
}

Un altro approccio

Un approccio meno dettagliato per la centralizzazione delle versioni delle dipendenze della libreria può essere ottenuto dichiarando il numero di versione come variabile una volta e utilizzandolo ovunque.

Nell'area di lavoro root build.gradle aggiungere questo:

ext.v = [
    supportVersion:'24.1.1',
]

E in ogni modulo che usa la stessa libreria aggiungi le librerie necessarie

compile "com.android.support:support-v4:${v.supportVersion}"
compile "com.android.support:recyclerview-v7:${v.supportVersion}"
compile "com.android.support:design:${v.supportVersion}"
compile "com.android.support:support-annotations:${v.supportVersion}"