【问题标题】:Build.gradle issue with implementation versionsBuild.gradle 实现版本的问题
【发布时间】:2018-07-29 13:20:45
【问题描述】:

我收到此警告:

所有 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' }

【问题讨论】:

    标签: android gradle android-support-library


    【解决方案1】:

    要查看为什么特定依赖项包含在依赖项树中,您可以(假设您的主模块名为 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"
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 2019-03-01
      • 1970-01-01
      • 2013-06-16
      • 2011-01-18
      • 2022-01-05
      • 2021-06-26
      • 2017-12-16
      • 2020-10-20
      相关资源
      最近更新 更多