Reputation: 8477
I am using Android support library com.android.support:appcompat-v7:28.0.0
. However, I am also using com.google.android.gms:play-services-nearby:16.0.0
, which depends on an earlier version of the support library.
To fix this, I used a resolutionStrategy
to force the support library to be version 28.0.0, but it isn't working. Android Studio is still complaining about conflicting dependencies. Why isn't my resolution strategy working?
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "rstudio.vedantroy.swarm"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
configurations.all {
resolutionStrategy.force 'com.android.support:appcompat-v7:28.0.0'
}
}
dependencies {
//Developer-added dependencies
implementation 'com.google.android.gms:play-services-nearby:16.0.0'
implementation 'com.airbnb.android:mvrx:0.7.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Upvotes: 7
Views: 40124
Reputation: 20531
With Gradle 8 the solution is different:
com.android.support:appcompat-v7:28.0.0
configurations.all {
resolutionStrategy {
force 'com.android.support:appcompat-v7:28.0.0'
// maybe, you also need this
// forcedModules = ['com.android.support:appcompat-v7:28.0.0']
}
}
More information at https://docs.gradle.org/8.3/dsl/org.gradle.api.artifacts.ResolutionStrategy.html.
Upvotes: 1
Reputation: 552
If anyone need, the script for Gradle Kotlin DSL is the following way:
configurations.all {
resolutionStrategy {
eachDependency {
when (requested.module.toString()) {
"androidx.fragment:fragment" -> useVersion("1.3.0")
// ...etc
}
}
}
}
Also you may want to take a look at the official docs.
Upvotes: 6
Reputation: 8483
You can use this configuration for all support library version to be unified:
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "28.0.0"
}
}
}
This code snippet will find each dependency who has group name com.android.support
and forcefully apply the version 28.0.0
, even to the internal dependencies. This way, you can also specify other dependencies projectwide to use explicit version, e.g. picasso or glide. You just need to specify its group and specify its specific version in details.useVersion
.
Hope this helps :)
Upvotes: 7