应用(22.0.0)和测试应用(21.0.3)的已解决版本不同


179

升级到API 22并支持lib版本22后,我收到以下警告:

警告:与依赖项“ com.android.support:support-annotations”冲突。应用(22.0.0)和测试应用(21.0.3)的已解决版本不同。

Gradle本身更宽容,但Android Studio却没有那么多。

我没有用21.0.3声明的依赖项...是使用21.0.3的依赖库之一,Google忘记用其余的批处理更新它吗?

build.gradle的临时演员被削减了

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

更新:(谢谢马克)

看起来像意式浓缩咖啡

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)

5
Gradle dependencies任务可能可以帮助您确定罪魁祸首:gradle.org/docs/current/userguide/…–
CommonsWare

1
谢谢马克。看来espresso-contrib是原因……
copolii 2015年

2
您可以尝试exclude阻止的21.0.3版本recyclerview-v7,自己插入22.0.0版本,并祈祷它们足以满足espresso-contrib的需求。就我个人而言,我很惊讶您通过这么长的依赖项列表来保持自己的理智……:-)
CommonsWare 2015年

1
是的 这成功了。如果您将其作为答案,我将为您提供bean :) androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0'){排除模块:'support-annotations'}
copolii

1
我的相同问题仅通过简单的android studio重新启动即可解决:)
Lakhwinder Singh Dhillon

Answers:


286

处理此类问题时的第1步是熟悉命令行Gradle。

步骤2是运行Gradle依赖关系报告(例如,gradle -q app:dependencies从项目根目录开始)。这将提供该问题更新中所示的ASCII树,并且应该可以帮助您确定导致冲突的工件版本的原因。

步骤#3是确定需要替换的内容。您选择仅替换冲突(support-annotations)。就我个人而言,我会选择错误版本树(recyclerview-v7)的根,尽管就我所知,在这种情况下,这可能不是最佳的解决方案。

步骤4是添加exclude指令以阻止您在步骤3中选择的内容:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

步骤#5是测试此更改的结果。您正在说的是espresso-contrib 必须处理的22.0.0版本support-annotations。那可能行得通。那可能不会。这取决于冲突的向后兼容性。在这种情况下,support-annotations应该对此做得很好。

第6步是饮用您选择的饮料,一种适合您所在地区和一天中不同时间的饮料。


4
exclude group: 'com.android.support', module: 'support-annotations' 自从您的版本从gradle发出“无法推断参数类型”警告以来,我就使用 过
appoll 15-4-20

2
Works ...也可以考虑将其应用于com.android.support.test:runner:0.3,com.android.support.test:rules:0.3和com.android.support.test.espresso:espresso-core:2.2
uudashr 2015年

在第4步中,您将在哪里添加androidTestCompile指令?如果我尝试将该语法添加到应用程序的依赖项块中,则会出现一些语法错误。就像现在写的那样,要精确指出添加位置有些困难。
OYRM '16

1
@OYRM:“您在哪里添加androidTestCompile指令?” -在dependencies。请参阅Chiu-Ki Chan的样本
CommonsWare,2016年

16
步骤#6是关键所在
Odaym '16

146

我要做的是将以下行添加到我的build.gradle脚本中

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

xx.x.x您的应用程序正在使用的任何版本的支持注释替换-这将在您的依赖项中显示,或者在Gradle同步消息中显示为:Resolved version for app (xx.x.x)如果同步出现问题。


哇。我这样做是为了升级,Junit但完全可以,我也可以为其他依赖项做到这一点。
Jared Burrows

10
实际上,这就是Google样本的操作方式,注释显示为“在测试应用程序中强制使用支持批注,因为它由运行程序模块内部使用。”。
desseim 2015年

这是对我最好的答案。注意:必须更新为'23 .1.1':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl '16

谢谢,在我的情况下,该行已经存在,但明确声明了一个有冲突的版本,已更新为必需版本,并且所有内容都像一个魅力。
2017年

如何将其添加到build.gradle?
ubuntu_noob '18年

58

实际上,这是Espresso Contrib的新更新版本的错误,您可以参考以下解决方法:android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

2
这是我的问题。门票在这里
Theblang

3
这发出了警告,@ RenanNery的解决方案更好
Diego Palomar

那不行 由于androidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky,2016年

1
@bony-链接已损坏
Mushtaq Jameel

这对我有用。我将此块放在“ android {testOptions {<here>}}”中
jwehrle

23

请参考https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-annotations:23.1.1'
  }
}

这解决了我的问题。

另外,您也可以在Windows和Mac / Linux上的./gradlew上运行gradlew,这将在需要时下载依赖项


1
这也对今天(2018-11-10)有所帮助,但使用了26.1.0版,以避免与27.1.1版发生冲突。
JB Rainsberger,

8

我也遇到了这个问题以及涉及appcompat的其他冲突,我发现的解决方案是添加测试编译并将它们设置为当前使用的sdk。以我为例,它是25,所以看起来像这样:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

此外,如您所见,我添加了与Android Material Design相关的设计依赖项。

希望对您有帮助=)


8

对于sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'

3

您可以在Windows和Mac / Linux的./gradlew上运行gradlew,这将在需要时下载依赖项。

您可以检查其中一个库是否依赖于支持注释,或者任何库的名称错误,然后尝试在gradle中将其排除,如下所示

compile(“ org.apache.maven:maven-ant-tasks:$ {mavenAntTaskVer} ‌”“){排除组:'junit'}

错误:与依赖项“ junit:junit”冲突。应用(3.8.1)和测试应用(4.12)的已解决版本不同。有关详情,请参见g.co/androidstudio/app-test-app-conflict。

这是我得到的错误,所以我使用了gradle行来解决此问题


这似乎是解决此类问题的好方法。另外,尝试在项目根目录下运行此./gradlew:app:dependencies命令行,它将围绕您的项目的依存关系创建一棵树,并进行仔细检查,然后找出冲突的出处。
frank jorsn

2

只需在build.gradle文件中删除以下行:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

那样行不通。这

0

这是说在仪器测试常见的问题,在这里,可以通过添加依赖关系androidTestCompile在里面的build.gradle根本解决。就我而言,appcompat,recyclerview和设计依赖项之间发生冲突。并通过添加以下行来解决

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'

0

我在26.0.0和27.1.1时遇到了同样的问题,实际上只是将前者升级到后一个就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.