Проблема с эспрессо Android - конфликт зависимости

Я пытаюсь интегрировать espresso в свое приложение для тестирования ui. Вот мои зависимости в Gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.1'
    compile 'com.github.bumptech.glide:okhttp-integration:[email protected]'
    compile 'com.squareup.okhttp:okhttp:2.0.0'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.android.support:cardview-v7:21.+'
    compile 'com.android.support:recyclerview-v7:21.+'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2'
    compile 'com.android.support:support-annotations:22.2.0'
    androidTestCompile 'com.android.support.test:runner:0.3'
    compile project(':common')
    compile project(':service')
}

Итак, все мои эспрессо-зависимости включены. Однако, когда я пытаюсь построить, я получаю эту ошибку:

Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (22.2.1) and test app (22.2.0) differ.

Кто-нибудь сталкивался с этим? Я нашел, что он сообщил здесь, однако нет разрешения. Кто-нибудь может исправить это?

Ответы

Ответ 1

Итак, после многократного поиска, я обнаружил, что мне нужно изменить зависимость для аннотаций поддержки.

Поэтому мне нужно было изменить compile 'com.android.support:support-annotations:22.2.0' в androidTestCompile 'com.android.support:support-annotations:22.+'

Ответ 2

Новая версия библиотеки espresso-contrib 2.2.2 теперь зависит от com.android.support:appcompat-v7:23.1.1, что приводит к конфликту при использовании другой версии appcompat-v7 в нашей временной зависимости compile, как показано ниже:

dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     testCompile 'junit:junit:4.12'
     compile 'com.android.support:appcompat-v7:23.4.0'

     androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2'
}

Чтобы избежать конфликта, когда мы исключаем зависимость appcompat-v7 от espresso-contrib, как показано ниже, она снова ломается из-за некоторых зависимостей значений от design support lib.

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2'){
    exclude module: 'support-annotations'
    exclude module: 'support-v4'
    exclude module: 'support-v13'
    exclude module: 'recyclerview-v7'
    exclude module: 'appcompat-v7'
}

Ошибка:

Ошибка: (69) Ошибка получения родительского элемента для элемента: ресурс не найден, который соответствует указанному имени 'TextAppearance.AppCompat.Display1'.

Таким образом, решение проблемы, описанной выше, заключается в исключении зависимостей lib-design-support от espresso-contrib, как показано ниже:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2'){
    exclude module: 'support-annotations'
    exclude module: 'support-v4'
    exclude module: 'support-v13'
    exclude module: 'recyclerview-v7'
    exclude module: 'design'
}

Это решает проблему конфликта!

Для получения более подробной версии ответа вы можете проверить мой другой ответ

Ответ 3

Последние версии зависимостей androidTest зависят от соответствующей версии support-annotations lib. В моем случае это:

androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
androidTestCompile 'org.mockito:mockito-core:2.0.31-beta'

Кроме того, в качестве обходного пути вы можете добавить следующий код в раздел build.gradle, android{}:

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

Ответ 4

В приложении Jake Wharton U2020 это решается следующим образом

Добавьте к вам файл gradle.build

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

Ответ 5

Мне пришлось объединить следующие версии для выпуска L после получения аналогичного конфликта зависимостей между проектным и тестовым приложением:

android {
    useLibrary 'org.apache.http.legacy'
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    defaultConfig {    
        minSdkVersion 14
        targetSdkVersion 23
    }
}
dependencies {
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:support-v4:23.0.1'

    androidTestCompile 'com.android.support.test:runner:0.4'
    androidTestCompile 'com.android.support.test:rules:0.4'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
}

useLibrary необходимо, так как мы используем импорт org.apache.http, см. https://github.com/bitstadium/HockeySDK-Android/issues/80

Ответ 6

Проблема в этом файле: Android-SDK\Extras\Android\m2repository\ком\Android\поддержка\тест\бегуна\0,3\Финалист 0.3.pom

здесь:

<dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-annotations</artifactId>
      <version>22.2.0</version>
      <scope>compile</scope>
</dependency>

если вы установите 22.2.1 вместо 22.2.0, он будет работать

Ответ 7

Как указано в документации Google: https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/user-guide#TOC-Resolving-conflicts-between-main-and -test-APK

Чтобы решить эту проблему, нужно явно установить для библиотеки поддержки в androidTestCompile версию, которую вы используете в проекте.

например, если вы используете библиотеку поддержки версии 25.0.1 просто добавьте

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

в вашей конфигурации build.gradle

Ответ 8

просто измените компиляцию com.android.support:support-annotations:22.2.0 на 23.0.1 если хотите использовать версию 2.2.1