警告:与依赖项“com.android.support:support-annotations”冲突

时间:2015-09-16 05:07:38

标签: android testing dependencies android-support-library

我几乎尝试了书中的每一个技巧。

  • ResolutionStrategy.force
  • 排除模块

但似乎没有任何效果,下面是我的build.gradle。我正在使用Gradle版本1.2.3。有人可以说清楚我的代码还有什么问题。

我唯一没有尝试的是改变Gradle的版本。 这是一个非常基本的Espresso测试案例。谢谢!

apply plugin: 'com.android.application'
android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
    }
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.rasika.job"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
repositories {
    mavenCentral()
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'

    testCompile 'junit:junit:4.12'

    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.3'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}

13 个答案:

答案 0 :(得分:52)

我分叉android-topeka google sample并将appcompat版本更新为23.1.0,同样的消息:

  

警告:与依赖性冲突   'com.android.support:support-annotations'。已解决的应用版本   (23.1.0)和测试应用程序(23.0.1)不同。

我补充说:

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

现在两者都解析为23.1.0,警告消失,应用程序和测试仍然有效。

我不确定这是更好的解决方案,所以我正在寻找另一个但是找到了你的问题。

更新:阅读this good explanation by PaulR

更新2:已确认,android-testing google sample已完成。

// Testing-only dependencies
// Force usage of support annotations in the test app, since it is internally used by the runner module.
androidTestCompile 'com.android.support:support-annotations:23.0.1'

Update3 Another good response by CommonsWare

使用以下方法检查您的特定版本/冲突/解决方案:

./gradlew -q yourmodule:dependencies

enter image description here

在你的情况下,Appcompat是22.1.1,但是你强迫22.1.0。

<强> UPDATE4: 依赖性冲突在The Android Build System (Android Dev Summit 2015)解释。

enter image description here

Resolving conflicts between main and test APK

  

当运行仪器测试时,主APK和测试APK   共享相同的类路径。如果主APK和,Gradle构建将失败   测试APK使用相同的库(例如番石榴)但不同   版本。如果gradle没有抓住,你的应用程序可能会表现   在测试期间和正常运行期间(包括崩溃)   其中一个案例)。

     

要使构建成功,只需确保两个APK都使用相同的内容   版。 如果错误是关于间接依赖(你是一个库   没有在build.gradle中提及),只需添加一个依赖项   更新版本的配置(“compile”或“androidTestCompile”)   需要它。您还可以使用Gradle的解决策略   机制。您可以通过运行./gradlew来检查依赖关系树   :app:dependencies和./gradlew:app:androidDependencies。

答案 1 :(得分:26)

我通过添加依赖来解决冲突:

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

答案 2 :(得分:15)

我遇到了同样的问题,由此解决了:

// build.gradle
...
android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2') {
        // Necessary if your app targets Marshmallow (since Espresso
        // hasn't moved to Marshmallow yet)
        exclude group: 'com.android.support', module: 'support-annotations'
    }
    androidTestCompile('com.android.support.test:runner:0.3') {
        // Necessary if your app targets Marshmallow (since the test runner
        // hasn't moved to Marshmallow yet)
        exclude group: 'com.android.support', module: 'support-annotations'
    }
}

解决方案在这里找到: https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso

更新: 最后我的build.gradle中的依赖块看起来像这样:

dependencies {
    ...        
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:support-v4:23.2.1'
    compile 'com.android.support:design:23.2.1'
    ...     

    // Necessary if your app targets Marshmallow (since Espresso
    // hasn't moved to Marshmallow yet)
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.2') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support.test:runner:0.5') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support.test:rules:0.5') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support:support-annotations:23.2.1') {
        exclude group: 'com.android.support'
    }
    androidTestCompile('com.android.support.test.uiautomator:uiautomator-v18:2.1.2') {
        exclude group: 'com.android.support'
    }
}

答案 3 :(得分:7)

最近添加uiautomator时发生了这种情况。要解决此问题,您需要确定使用过时模块的依赖项或依赖项。你可以通过将每个 androidTestCompile 依赖包装到一个块中来实现这一点,如下所示:

androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2') {
    transitive = false;
}

这个可能打破了其他一些东西,所以你需要小心。我能够确切地确定哪两个依赖项对我造成了这个问题,并且只是将这种阻塞机制添加到那些。

答案 4 :(得分:4)

我通过从runner和espresso-core依赖项中排除support-annotation库来解决冲突:

androidTestCompile 'com.android.support.test:runner:0.5',{
        exclude group: 'com.android.support', module: 'support-annotations'
}
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2'){
        exclude group: 'com.android.support', module: 'support-annotations'
}

答案 5 :(得分:3)

将其添加到主build.gradle:

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

答案 6 :(得分:3)

将以下代码添加到build.gradle文件

中的依赖关系块
compile 'com.android.support:support-annotations:23.2.1'
testCompile 'com.android.support:support-annotations:23.2.1'
androidTestCompile 'com.android.support:support-annotations:23.2.1'

答案 7 :(得分:1)

androidTestCompile更改为测试编译。并提醒不要将其更改为编译,只需将此依赖项编译到我们的调试APK或测试APK。

答案 8 :(得分:1)

对我来说这很好用

dependencies {

    androidTestCompile 'com.android.support:support-annotations:23.1.1'
}

答案 9 :(得分:1)

我通过添加依赖来解决冲突:

compile 'com.android.support:appcompat-v7:23.2.1'
 compile 'com.android.support:design:23.2.1'
...
 androidTestCompile 'com.android.support:support-annotations:23.2.1'

答案 10 :(得分:0)

也陷入问题说

无法解决

com.android.support:support-annotations:23.1.0

并试图在其他服务器中找到

但解决了我的问题的是添加:

google-service.json 
来自

文件

https://developers.google.com/mobile/add

并将其复制并粘贴到

YourAndroidProject/app 

然后重新编译它,我希望你的代码会飞

答案 11 :(得分:0)

用它来解决冲突

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

答案 12 :(得分:0)

我通过添加依赖来解决冲突:

androidTestCompile "com.android.support:support-annotations:26.0.0-beta1"