实现版本的Build.gradle问题



我收到此警告:

所有com.android.support库都必须使用完全相同的版本规范(混合版本可能导致运行时崩溃(。建立版本27.1.1、27.1.0。示例包括com.android.support:动画矢量可绘制:27.1.1和com.android.support:exifinterface:27.1。

我理解这一点,但为什么在所有com.android.support版本都相同的情况下仍向我显示此警告?(27.1.1(

这是我的文件的内容:

apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.app.sin.retrolist"
minSdkVersion 18
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} }
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.squareup.picasso:picasso:2.71828' }

要了解依赖关系树中包含特定依赖关系的原因,您可以(假设您的主模块名为app,并且您在macOS上(运行一个简单的:

./gradlew app:dependencies

在控制台输出中,您将看到完整的依赖关系树以及如何解析库版本。

处理这种依赖冲突的正确方法是明确定义一种解决策略:

configurations.all {
resolutionStrategy {
force 'com.android.support:exifinterface:27.1.1'
}
}

它必须放在app模块中build.gradle文件的根目录中。

用覆盖冲突的依赖关系

dependencies {
...
implementation 'com.android.support:exifinterface:27.1.1'
}

不太正确,因为您的模块不直接依赖于这个库,所以,例如,如果您的依赖项的未来版本不再依赖它,即使您不需要它,它仍然会包含在已解决的依赖项列表中。

更好的是,你可以定义:

ext {
supportLibVersion = "27.1.1"
}

在主build.gradle文件中,然后在任何需要的地方使用它:

configurations.all {
resolutionStrategy {
force "com.android.support:exifinterface:$rootProject.supportLibVersion"
}
}
dependencies {
...
implementation "com.android.support:appcompat-v7:$rootProject.supportLibVersion"
implementation "com.android.support:recyclerview-v7:$rootProject.supportLibVersion"
implementation "com.android.support:cardview-v7:$rootProject.supportLibVersion"
...
}

最新更新