2016-05-18 25 views
7

Sto cercando di imparare espresso android .. Ho seguito alcuni tutorial di base e stava funzionando bene. Ma ora voglio fare qualche test sul cassetto di navigazione di Android. Per questo ho bisogno di usare dipendenza gradle androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 2.2.2' ma che causa conflitto con altre dipendenze. Il mio file 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' 

} 

errore è qualcosa di simile:

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. 

seguito questo: link per l'espresso installare

Ho anche cercato di escludere l'annotazione dipendenza:

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

Il messaggio di errore indica conflitto con 'com.android.support: support-v4' e' com.android.support: appcompat-v7'. Quindi cerca di escluderli anche tu. – nenick

risposta

27

TL; DR;

Nuova versione di espresso-contrib 2.2.2 biblioteca ha ora dipendenza com.android.support:appcompat-v7:23.1.1 risultante in conflitto quando si utilizza versione diversa di appcompat-v7 nella nostra dipendenza compile tempo, come di seguito:

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

per evitare conflitti quando escludiamo appcompat-v7 la dipendenza da espresso-contrib come di seguito si interrompe nuovamente a causa di alcune dipendenze di valore su lib design support.

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

Errore:

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

Causa principale:

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.

Quindi, la soluzione al problema di cui sopra è da escludere 'Design-support' dipendenza lib da espresso-contrib come di seguito:

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 cappello risolve il problema del conflitto!

PIÙ VERSIONE (nel caso in cui qualcuno è interessato):

Per scoperto le ragioni dei vari problemi di conflitto che abbiamo di fronte quando si utilizza `espresso-contrib library' ho creato campione app per scoprire la causa principale .

Step 1:Using Espresso-Contrib Lib version 2.2.1 

Creato App per usare 'espresso-contrib' lib versione 2.2.1 aggiungendo le righe seguenti in app/build.gradle di file:

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

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

}

Nota: In questo caso, non sto importando altri componenti di libreria di supporto come
appcompat-v7,recyclerview-v7,etc.

Il grafico di dipendenza per la messa a punto di cui sopra si presenta come di seguito:
enter image description here

Come si può vedere che espresso-contrib 2.2.1 lib ha dipendenze transitive su versione 23.0.1 di
support-v4, recyclerview-v7, support-annotations, ecc.

Poiché non sto definendo le dipendenze per recyclerview-v7, support-annotations nel mio progetto, la configurazione di cui sopra funzionerebbe perfettamente.

Ma quando definiamo quelle come dipendenze di compilazione [come di seguito] nel nostro progetto otteniamo problemi di conflitto di versione come indicato nella domanda.

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

Per evitare questi conflitti si aggiungono sotto la linea al nostro lib espresso-contrib:

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

Questo assicura quei dipendenze non vengono scaricati come parte di espresso-contrib dipendenze transitive.
Tutto funziona perfettamente con l'impostazione precedente. Nessun problema!

Step 2: Using Espresso-Contrib lib version 2.2.2 

cambiato build.gradle di App per usare 'espresso-contrib' lib versione 2.2.2 modificando il precedente file 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' 
    } 
} 

Ma quando costruisco progetto utilizzando sopra setup..build non riesce con l'errore registrato in questione ..

errore:

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.

Così, guardando errore ho aggiunto una riga più sopra build.gradle:

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

Ma questo non risolve il problema dei conflitti e ottengo l'errore dipendenze valore iscritto nei commenti.
Così ho verificare la presenza di dipendenze grafico della mia app ancora: enter image description here

Come si può vedere ora che espresso-contrib 2.2.2 lib ha la dipendenza ora transitiva sulla com.android.support:design:23.1.1 causa il conflitto di cui sopra.

Quindi, abbiamo bisogno di aggiungere sotto la linea all'interno androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2') blocco:

exclude module: 'design' 

questo risolve il problema di conflitto in lib versione 2.2.2!

+0

waw ... Risposta perfetta. Grazie. @Droidwala –

+0

@ D4Developer Sono felice di poter aiutare :) Puoi fare clic su segno di spunta verde per contrassegnare come risposta accettata in modo che aiuti gli utenti a trovare questa domanda in futuro. – Droidwala

+0

Risposta perfetta. Grazie! – Travis

0

fare sotto

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

Bene, ho provato a escludere, ma quando scrivo questo gruppo di esclusione: 'com.android.support', modulo: 'appcompat-v7'' frena alcune dipendenze dei valori. –

+0

Ho provato questo 'transitive = false' e ​​ha funzionato, però. Ma non sono sicuro se questa sia una buona soluzione –

Problemi correlati