Le versioni risolte per l'app (22.0.0) e l'app di test (21.0.3) differiscono


179

Dopo aver eseguito l'aggiornamento a API 22 e supportato la revisione lib 22, ricevo il seguente avviso:

Avvertenza: conflitto con la dipendenza "com.android.support:support-annotations". Le versioni risolte per l'app (22.0.0) e l'app di test (21.0.3) differiscono.

Gradle stesso è più indulgente, ma Android Studio, non tanto.

Non ho dipendenze dichiarate con 21.0.3 ... è una delle librerie dipendenti che utilizzano 21.0.3 e Google ha dimenticato di aggiornarlo con il resto del batch?

Il mio build.gradlecon gli extra tagliati

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

Aggiornamento: (Grazie Mark)

Sembra che sia espresso-contrib

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)

5
L' dependenciesattività Gradle potrebbe aiutarti a identificare il colpevole: gradle.org/docs/current/userguide/…
CommonsWare

1
Grazie Marco. Sembra che espresso-contribsia la causa ...
copolii

2
Puoi provare excludea bloccare l'edizione 21.0.3 di recyclerview-v7, inserire tu stesso l'edizione 22.0.0 e pregare che siano sufficientemente compatibili per espresso-contrible esigenze. Personalmente, sono sorpreso che tu stia mantenendo la tua sanità mentale con quella lunga lista di dipendenze ... :-)
CommonsWare

1
Sì. Questo ha funzionato. Se lo metti come risposta, ti darò i fagioli :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {exclude module: 'support-annotations'}
copolii

1
Il mio stesso problema è stato risolto semplicemente riavviando lo studio Android :)
Lakhwinder Singh Dhillon

Risposte:


286

Il primo passo quando si ha a che fare con questo genere di cose è mettersi a proprio agio con Gradle a riga di comando.

Il passaggio n. 2 consiste nell'eseguire il rapporto sulle dipendenze Gradle (ad es. gradle -q app:dependenciesDalla radice del progetto). Ciò fornirà l'albero ASCII come mostrato nell'aggiornamento alla domanda e dovrebbe aiutarti a identificare ciò che richiede le versioni di artefatto in conflitto.

Il passaggio 3 è decidere cosa deve essere sostituito. Hai scelto di sostituire solo il conflitto ( support-annotations). Personalmente, sarei andato con la radice dell'albero della versione sbagliata ( recyclerview-v7), anche se per quello che ne so potrebbe non essere il miglior modo di agire in questo caso.

Il passaggio n. 4 consiste nell'aggiungere la excludedirettiva per bloccare ciò che è stato scelto nel passaggio n. 3:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

Il passaggio n. 5 è testare questo cambiamento. Quello che stai facendo è dire che espresso-contrib ha a che fare con l'edizione 22.0.0 di support-annotations. Potrebbe funzionare. Non può. Dipende dalla retrocompatibilità del conflitto. In questo caso, support-annotationsdovrebbe essere abbastanza buono.

Il passaggio n. 6 è consumare la bevanda di tua scelta, una appropriata per la tua località e l'ora del giorno.


4
Ho usato da exclude group: 'com.android.support', module: 'support-annotations' quando la tua versione ha generato un avviso "non posso inferire i tipi di argomenti" da gradle
appoll

2
Funziona ... considera anche di applicarlo a com.android.support.test: runner: 0.3, com.android.support.test: regole: 0.3 e com.android.support.test.espresso: espresso-core: 2.2
uudashr

Nel passaggio 4, dove stai aggiungendo la direttiva androidTestCompile? Se provo ad aggiungere quella sintassi al blocco delle dipendenze della mia app, ottengo alcuni errori di sintassi. Dato che questo è scritto ora, è un po 'difficile dire esattamente dove lo aggiungi.
OYRM

1
@OYRM: "dove stai aggiungendo quella direttiva androidTestCompile?" - in dependencies. Vedi questo esempio da Chiu-Ki Chan.
Commons War

16
Il passaggio n. 6 è la chiave qui
Odaym

146

Quello che ho fatto per risolverlo è stato aggiungere la riga seguente al mio script build.gradle

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

Sostituisci xx.x.xcon qualsiasi versione delle annotazioni di supporto utilizzate dalla tua app: questo verrà mostrato nelle tue dipendenze o nel messaggio di sincronizzazione Gradle come:Resolved version for app (xx.x.x) dovrebbe esserci un problema di sincronizzazione.


Wow. Faccio questo per l'aggiornamento Junitma totalmente per ottenerlo posso farlo anche per altre dipendenze.
Jared Burrows

10
Questo è davvero il modo in cui lo fanno gli esempi di Google , un commento che recita "Forza l'uso delle annotazioni di supporto nell'app di test, poiché viene utilizzato internamente dal modulo Runner".
desseim,

Questa è stata la risposta migliore per me. Nota: è necessario aggiornare a '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl,

Grazie, nel mio caso la linea era già lì, ma dichiarava esplicitamente una versione in conflitto, aggiornata a quella richiesta e tutto funzionava come un fascino.
RAM237,

come aggiungerlo a build.gradle?
ubuntu_noob

58

In realtà è un bug della nuova versione di aggiornamento di Espresso Contrib, puoi fare riferimento a questa soluzione alternativa: android-testing / build.gradle

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

2
Questo era il mio problema Il biglietto è qui .
theblang

3
Questo crea un avvertimento, la soluzione di @ RenanNery è migliore
Diego Palomar il

Non funziona Ottengo ancora l'errore di conflitto a causa diandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky

1
@bony - Collegamento interrotto
Mushtaq Jameel

Questo ha funzionato per me. Ho inserito questo blocco in "android {testOptions {<here>}}"
jwehrle

23

Consultare https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

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

Questo ha risolto il mio problema.

In alternativa puoi eseguire gradlew su Windows e ./gradlew per mac / linux, questo scaricherà la tua dipendenza quando necessario


1
Questo mi ha aiutato anche oggi (10-11-2018), ma con la versione 26.1.0, per evitare un conflitto con la versione 27.1.1.
JB Rainsberger,

8

Mi sono anche imbattuto in questo problema e in altri conflitti che coinvolgono appcompat e la soluzione che ho trovato è stata l'aggiunta di compilation di test e la loro impostazione sul SDK attualmente in uso. Nel mio caso è 25, quindi è così:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

Inoltre, come puoi vedere, ho aggiunto la dipendenza dal design, che è correlata ad Android Material Design.

Spero che aiuti =)


8

per sdkversion 25

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

3

puoi eseguire gradlew su windows e ./gradlew per mac / linux, questo scaricherà la tua dipendenza quando necessario.

Puoi verificare se una delle librerie ha dipendenza dall'annotazione di supporto o se una delle librerie ha un nome errato e provare ad escluderla in gradi come sotto

compile ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {escludi gruppo: 'junit'}

Errore: conflitto con la dipendenza 'junit: junit'. Le versioni risolte per l'app (3.8.1) e l'app di test (4.12) differiscono. Vedi g.co/androidstudio/app-test-app-conflict per i dettagli.

questo era l'errore che stavo ottenendo, quindi ho usato sopra la linea di livello per risolvere il problema


Questo sembra davvero un buon modo per risolvere problemi come questo. Inoltre, prova a eseguire questa riga di comando ./gradlew: app: dipendenze nella directory principale del tuo progetto, creerà un albero sulle dipendenze del tuo progetto e controllerà attentamente, quindi troverai da dove proviene il conflitto.
Frank Jorsn,

2

Elimina semplicemente queste righe nel tuo file build.gradle:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Non funziona in quel modo. Causa più errori nel progetto

0

Questo è un problema comune nel test di strumentazione come indicato qui e può essere risolto semplicemente aggiungendo le dipendenze per androidTestCompile all'interno di build.gradle. Nel mio caso sono sorti conflitti nelle dipendenze di appcompat, recyclerview e design. E risolto aggiungendo le seguenti righe

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'

0

Stavo avendo lo stesso problema con 26.0.0 e 27.1.1 e in realtà l'aggiornamento del primo al successivo lo ha fatto funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.