2015-09-16 18 views
36

Ho provato quasi tutti i trucchi del libro.Avviso: conflitto con la dipendenza "com.android.support:support-annotations"

  • ResolutionStrategy.force
  • Esclusi i moduli

Ma nulla sembra funzionare, al di sotto è il mio build.gradle. Sto usando la versione 1.2.3 di Gradle. Qualcuno può per favore illuminare ciò che potrebbe essere sbagliato nel mio codice.

L'unica cosa che non ho provato è la modifica della versione di Gradle. Si tratta di un caso di test Espresso molto semplice. Grazie!

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

risposta

6

Questo mi è successo di recente quando si aggiunge l'uiautomatore. Per risolvere questo problema, è necessario capire quale dipendenza o dipendenza utilizza il modulo obsoleto. È possibile farlo avvolgendo ogni androidTestCompile dipendenza in un blocco, in questo modo:

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

Questo potrebbe rompere alcune altre cose, però, quindi è necessario stare attenti. Sono stato in grado di individuare esattamente quali delle due dipendenze causavano questo problema per me, aggiungendo semplicemente questo meccanismo di blocco a queste.

+0

Questo in congiunzione con './gradlew -q nomemodulo: dependencies' è il più pulito. –

51

I biforcato android-topeka google sample e aggiornato appcompat versione a 23.1.0, lo stesso messaggio:

Attenzione: Conflitto con dipendenza 'com.android.support:support-annotations'. Le versioni risolte per l'app (23.1.0) e l'app di prova (23.0.1) sono diverse.

ho aggiunto:

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

Ora sia volontà di 23.1.0, l'avvertimento è andato, e l'applicazione e le prove ancora lavoro.

Non sono sicuro che sia la soluzione migliore, quindi sto cercando un altro ma ho trovato la tua domanda.

Aggiornamento: Leggi this good explanation by PaulR.

Aggiornamento2: Confermato, android-testing google sample lo fa.

// 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.

Controlla i tuoi specifiche versioni/conflitti/risoluzioni utilizzando:

./gradlew -q yourmodule:dependencies 

enter image description here

AppCompat è 22.1.1 nel tuo caso, ma si stanno costringendo 22.1.0.

Update4: Conflitto di dipendenza spiegato a The Android Build System (Android Dev Summit 2015).

enter image description here

Resolving conflicts between main and test APK

Quando i test vengono eseguiti strumentazione, sia il principale APK e testare APK condividono lo stesso percorso di classe. La generazione gradle fallirà se l'APK principale e l'APK di test utilizzano la stessa libreria (ad esempio Guava) ma in diverse versioni . Se gradle non l'ha rilevato, la tua app potrebbe comportarsi in modo diverso da durante i test e durante l'esecuzione normale (incluso arresto anomalo in uno dei casi in ).

Per fare in modo che la compilazione abbia esito positivo, assicurati che entrambi gli APK utilizzino la stessa versione . Se l'errore è di circa una dipendenza indiretta (una libreria si non ha menzionato nel vostro build.gradle), basta aggiungere una dipendenza per la versione più recente alla configurazione ("compilazione" o "androidTestCompile") che ne ha bisogno. È anche possibile utilizzare il meccanismo della strategia di risoluzione di Gradle . È possibile ispezionare la struttura delle dipendenze eseguendo ./gradlew : app: dipendenze e ./gradlew: app: androidDependencies.

1

androidTestCambiamento conversione in test Compilare. E ricorda di non cambiarlo per compilare, basta che queste dipendenze siano compilate nel nostro APK di debug o test APK.

3

Aggiungi questo alla tua struttura principale.Gradle:

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

Perché la chiusura 'allprojects'? –

+0

Puoi spiegare perché funziona? Grazie! – dazza5000

+0

Ciò imporrà tutte le risoluzioni da eseguire utilizzando l'SDK di Android 23, evitando così qualsiasi conflitto causato dalla presenza di diversi sdk. – Sid

26

ho risolto il conflitto con l'aggiunta di dipendenza:

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

Questo ha funzionato per me, ma non solo questa libreria, a volte anche altre librerie di supporto sono in conflitto. Puoi aggiungerne altri anche con AndroidTestCompile.Solo un promemoria per gli altri che hanno problemi simili –

0

Nel anche ottenuto nel problema dicendo

Impossibile risolvere

com.android.support:support-annotations:23.1.0 

e ha cercato di trovare in altri server,

Ma ciò che ha risolto il mio problema è l'aggiunta di:

google-service.json 

file da

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

e copiarlo e incollarlo in

YourAndroidProject/app 

Poi ricompilare e spero che il vostro codice fly

1

Per me ha funzionato bene

dependencies { 

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

Aggiungere codici successivi al blocco dipendenza nel file di 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' 
1

Ho risolto il conflitto di dipendenza aggiungendo:

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

Ho avuto lo stesso problema, risolto da questo :

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

soluzione è stata trovata qui: https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso

UPDATE: finalmente dipendenze blocco nel mio build.gradle assomiglia a questo:

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

Questa è solo follia, non dovremmo essere obbligati a farlo .. –

0

Usare questo per risolvere i conflitti

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

Per favore aggiungi alcuni dettagli alla tua risposta, come una spiegazione di cosa c'è di sbagliato nell'approccio dell'OP e perché il tuo suggerimento lo affronta. Questa risposta è valida solo perché è passato più di un anno da quando la domanda e le cose sono diverse ora? –

3

ho risolto il conflitto escludendo la libreria di supporto-annotazione dalle dipendenze di runner e espresso-core:

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

Grazie per la risposta corretta. –

0

Ho risolto il conflitto di dipendenza aggiungendo:

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