代码之家  ›  专栏  ›  技术社区  ›  undefinedBehavior

实现版本的Build.gradle问题

  •  3
  • undefinedBehavior  · 技术社区  · 7 年前

    我收到这个警告:

    所有com.android.support库必须使用完全相同的版本 规范(混合版本可能导致运行时崩溃)。找到 版本27.1.1,27.1.0。例子包括 支持:动画矢量绘图:27.1.1和 支持:ExeField: 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' }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   manfcas Benoit Martin    7 年前

    若要查看依赖项树中包含特定依赖项的原因,可以(假设主模块名为 app 运行一个简单的:

    ./gradlew app:dependencies
    

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

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

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

    这个必须放在 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"
        ...
    }