Проблема с эспрессо 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