繁体   English   中英

Build.gradle问题与实现版本

[英]Build.gradle issue with implementation versions

我收到这个警告:

所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。 找到的版本27.1.1,27.1.0。 示例包括com.android.support:animated-vector-drawable: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"
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM