Build.gradle 实施版本问题
Build.gradle issue with implementation versions
我收到此警告:
All com.android.support libraries must use the exact same version
specification (mixing versions can lead to runtime crashes). Found
versions 27.1.1, 27.1.0. Examples include
com.android.support:animated-vector-drawable:27.1.1 and
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"
...
}
我收到此警告:
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 27.1.1, 27.1.0. Examples include com.android.support:animated-vector-drawable:27.1.1 and 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"
...
}