2016-05-18 3 views
7

Я пытаюсь изучить эндшрессо для Android. Я следил за некоторыми основными учебниками, и он работал нормально. Но теперь я хочу сделать некоторые тесты на ящике навигации Android. Для этого мне нужно использовать зависимость gradle androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 2.2.2', но это вызывает конфликт с другими зависимостями. Мой Gradle файл:Android espresso-cotrib gradle build failing

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.3" 

defaultConfig { 
    applicationId "my.com.myapp_android" 
    minSdkVersion 18 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 
repositories { 
jcenter() 
} 
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
//material design 
compile 'com.android.support:appcompat-v7:23.3.0' 
compile 'com.android.support:support-v4:23.3.0' 

//zxing 
compile 'com.journeyapps:zxing-android-embedded:[email protected]' 
compile 'com.google.zxing:core:3.2.1' 

//Testing 
// Optional -- Mockito framework 
testCompile 'org.mockito:mockito-core:1.10.19' 
androidTestCompile 'com.android.support:support-annotations:23.3.0' 
androidTestCompile 'com.android.support.test:runner:0.5' 
androidTestCompile 'com.android.support.test:rules:0.4.1' 
// Optional -- Hamcrest library 
androidTestCompile 'org.hamcrest:hamcrest-library:1.3' 
// Optional -- UI testing with Espresso 
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2' 
// Optional -- UI testing with UI Automator 
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' 




//inMarketSDK 
//compile group: 'com.inmarket', name: 'm2msdk', version: '2.29', ext: 'aar' 

} 

ошибки что-то вроде этого:

Error:Conflict with dependency 'com.android.support:support-v4'. Resolved versions for app (23.3.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details. 
Error:Conflict with dependency 'com.android.support:appcompat-v7'. Resolved versions for app (23.3.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details. 

вслед за этим: link для эспрессо установки

Я также попытался исключить аннотаций зависимость:

androidTestCompile ('com.android.support.test.espresso:espresso-core:2.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.espresso:espresso-contrib:2.2.2') 
     { 
      // Necessary if your app targets Marshmallow (since Espresso 
      // hasn't moved to Marshmallow yet) 
      exclude group: 'com.android.support', module: 'support-annotations' 
     } 
+0

Сообщение об ошибке говорит о конфликте с 'com.android.support: support-v4' и' com.android.support: appcompat-v7'. Поэтому постарайтесь их исключить. – nenick

ответ

27

TL; DR;

Новая версия 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' 
} 

Ошибка:

Error:(69) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Display1'.

первопричины:

This is because the design support lib has dependency on appcompat-v7 .
So,when we exclude 'appcompat-v7' module from espresso-contrib dependencies(like above) , the design support lib downloaded as part of transitive dependency of espresso-contrib lib couldn't find the compatible version of appcompat-v7 lib(23.1.1) it is using internally in its resources files and thus gives out the above error.

Таким образом, решение проблемы является, чтобы исключить 'дизайн-поддержка' Lib зависимость от 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' 
} 

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

ДОЛЬШЕ версия (в случае, если кто-то заинтересован):

Чтобы выясняли причины различных конфликтных вопросов с которыми мы сталкиваемся при использовании `Эспрессо-вно» Библиотека я создал пример приложения, чтобы выяснить причину ,

Step 1:Using Espresso-Contrib Lib version 2.2.1 

создания приложения использовать 'эспрессо-вно' Lib версия 2.2.1 путем добавления следующих строк в файле app/build.gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 

    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1' 

}

Примечание: В этом случае я не импортировать любые другие компоненты библиотеки поддержки как
appcompat-v7,recyclerview-v7,etc.

График зависимости для вышеуказанной настройки выглядит следующим образом:
enter image description here

Как можно видеть, что espresso-contrib 2.2.1 Lib имеет зависимости транзитивные на версии 23.0.1 от
support-v4, recyclerview-v7, support-annotations и др.

Поскольку я не определяю зависимости для recyclerview-v7, support-annotations, в моем проекте вышеуказанная настройка будет работать нормально.

Но когда мы определяем их как скомпилированные зависимости [как показано ниже] в нашем проекте, мы получаем проблемы с конфликтом версий, как указано в вашем вопросе.

compile 'com.android.support:appcompat-v7:23.3.0' 
compile 'com.android.support:support-v4:23.3.0' 

Чтобы избежать этих конфликтов мы добавим ниже линии нашего эспрессо-вно Lib:

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

Это гарантирует, что эти зависимости не загружаются как часть espresso-contrib переходных зависимостей.
Все работает отлично с вышеуказанной настройкой. Нет проблем!

Step 2: Using Espresso-Contrib lib version 2.2.2 

Измененное build.gradle приложения использовать 'эспрессо-вно' Lib версия 2.2.2 путем изменения предыдущего файла build.gradle:

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

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' 
    } 
} 

Но когда я построить проект с использованием выше setup..build с ошибкой, публикуемой в вопросе ..

Ошибка:

Error:Conflict with dependency 'com.android.support:appcompat-v7'. Resolved versions for app (23.3.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

Таким образом, глядя на ошибки я добавил еще одну строку выше build.gradle:

exclude module: 'appcompat-v7' (inside androidTestCompile block of espresso-contrib) 

Но это не решает проблему конфликтов и я получаю зависимости значения ошибки размещены в комментариях.
Так я проверить зависимости графа моего приложения снова: enter image description here

Как видно теперь, что espresso-contrib 2.2.2 Lib теперь переходную зависимость от com.android.support:design:23.1.1 вызвавшей выше конфликта.

Таким образом, нам нужно добавить ниже линии внутри androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2') блока:

exclude module: 'design' 

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

+0

waw ... Отличный ответ. Спасибо. @Droidwala –

+0

@ D4Developer Я рад, что смог помочь :) Вы можете щелкнуть по зеленому тику, чтобы отметить это как принятый ответ, чтобы он помог пользователям понять этот вопрос в будущем. – Droidwala

+0

Идеальный ответ. Благодаря! – Travis

0

ниже

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1'){ 
    exclude module: 'support-annotations' 
    exclude module: 'support-v4' 
    exclude module: 'recyclerview-v7' 
} 
+0

Ну, я попробовал исключить, но когда я пишу это 'exclude group: 'com.android.support', модуль: 'appcompat-v7'', он тормозит некоторые зависимости значений. –

+0

Я пробовал этот «transitive = false», но он работал. Но не уверен, что это хорошее решение. –