web-dev-qa-db-fra.com

Exclure le même groupe de plusieurs dépendances dans Gradle?

J'ai le code suivant dans le build.gradle dans le module d'application de mon projet Android

implementation('com.google.firebase:firebase-core:16.0.1', {
    exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-database:16.0.1', {
    exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-auth:16.0.1', {
    exclude group: 'com.Android.support'
})
implementation('com.google.firebase:firebase-crash:16.0.1',  {
    exclude group: 'com.Android.support'
})

Les bibliothèques Firebase contiennent toutes une version conflictuelle de la bibliothèque de support Android que j'utilise et je dois donc l'exclure pour éviter l'avertissement de génération

All com.Android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 27.1.1, 26.1.0. Examples include com.Android.support:animated-vector-drawable:27.1.1 and com.Android.support:support-media-compat:26.1.0 less... (Ctrl+F1) 
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion).

Existe-t-il un moyen de regrouper ces instructions d'implémentation, je n'ai donc qu'à écrire une seule instruction d'exclusion?

MODIFIER

Ma solution spécifique basée sur la réponse de Cris

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'com.Android.support') {
            details.useVersion '27.1.1'
        }
    }
}

dependencies {
    implementation 'com.Android.support:appcompat-v7:27.1.1'
    implementation 'com.google.firebase:firebase-core:16.0.1'
    implementation 'com.google.firebase:firebase-database:16.0.1'
    implementation 'com.google.firebase:firebase-auth:16.0.1'
    implementation 'com.google.firebase:firebase-crash:16.0.1'
}
9
Moses

Comme indiqué sur l'officiel documentation gradle , vous pouvez y parvenir comme suit:

configurations {
    implementation {
        exclude group: 'javax.jms', module: 'jms'
        exclude group: 'com.Sun.jdmk', module: 'jmxtools'
        exclude group: 'com.Sun.jmx', module: 'jmxri'
    }
}

Une autre option consiste à forcer une version spécifique du groupe de bibliothèques, prise en charge dans ce cas. Ceci est également couvert par la documentation officielle

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'org.gradle') {
            details.useVersion '1.4'
            details.because 'API breakage in higher versions' 
            //note that details.because requires Gradle version 4.6 or higher
        }
    }
}
9
Cris

Je règle généralement cette erreur en la mettant dans le fichier gradle:

// use default version for all support repositories
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.Android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion 'PUT_THE_VERSION_YOU_WANT' //latest would be 28.0.0-rc02
            }
        }
    }
}

Vous devrez peut-être ajouter multiDexEnabled true dans Android. Ce que cela fait, c'est forcer tout à utiliser une version spécifique, donc ils n'auront pas de conflits.

0
Jacob Celestine