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'
}
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
}
}
}
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.