Las versiones resueltas para la aplicación (22.0.0) y la aplicación de prueba (21.0.3) difieren

179

Después de actualizar a API 22 y admitir lib revision 22, recibo la siguiente advertencia:

Advertencia: conflicto con la dependencia 'com.android.support:support-annotations'. Las versiones resueltas para la aplicación (22.0.0) y la aplicación de prueba (21.0.3) difieren.

Gradle en sí es más indulgente, pero Android Studio, no tanto.

No tengo dependencias declaradas con 21.0.3 ... ¿una de las bibliotecas dependientes usa 21.0.3 y Google olvidó actualizarla con el resto del lote?

Mi build.gradlecon los extras recortados

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

Actualización: (Gracias Mark)

Parece que es 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 (*)
copolii
fuente
55
La dependenciestarea Gradle puede ayudarlo a identificar al culpable: gradle.org/docs/current/userguide/…
CommonsWare
1
Gracias Mark Parece que espresso-contribes la causa ...
copolii
2
Puede intentar excludebloquear la edición 21.0.3 de recyclerview-v7, tirar la edición 22.0.0 usted mismo y rezar para que sean lo suficientemente compatibles con espresso-contriblas necesidades. Personalmente, me sorprende que mantengas la cordura con esa larga lista de dependencias ... :-)
CommonsWare
1
Sí. Esto hizo el truco. Si pone eso como respuesta, le daré los frijoles :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {excluir módulo: 'support-annotations'}
copolii
1
Mi mismo problema se resolvió con un simple reinicio de Android Studio :)
Lakhwinder Singh Dhillon

Respuestas:

286

El Paso # 1 cuando se trata con este tipo de cosas es sentirse cómodo con la línea de comandos Gradle.

El paso 2 es ejecutar el informe de dependencias de Gradle (por ejemplo, gradle -q app:dependenciesdesde la raíz del proyecto). Esto proporcionará el árbol ASCII como se muestra en la actualización de la pregunta, y debería ayudarlo a identificar qué está pidiendo las versiones de artefactos en conflicto.

El paso 3 es decidir qué necesita ser reemplazado. Elegiste reemplazar solo el conflicto ( support-annotations). Personalmente, habría seguido la raíz del árbol de versión incorrecta ( recyclerview-v7), aunque por lo que sé, podría no ser el mejor curso de acción en este caso.

El paso 4 es agregar la excludedirectiva para bloquear lo que eligió en el paso 3:

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

El paso 5 es probar el diablo de este cambio. Lo que estás haciendo es decir que espresso-contrib tiene que ver con la edición 22.0.0 de support-annotations. Eso puede funcionar. Eso tal vez no. Depende de la compatibilidad con versiones anteriores del conflicto. En este caso, support-annotationsdebería ser bastante bueno al respecto.

El Paso # 6 es consumir la bebida de su elección, una apropiada para su localidad y hora del día.

CommonsWare
fuente
44
Utilicé exclude group: 'com.android.support', module: 'support-annotations' desde que su versión generó una advertencia de "no se pueden inferir los tipos de argumentos" de gradle
appoll
2
Funciona ... también considere aplicar esto a com.android.support.test: runner: 0.3, com.android.support.test: rules: 0.3 y com.android.support.test.espresso: espresso-core: 2.2
uudashr
En el Paso 4, ¿dónde está agregando esa directiva androidTestCompile? Si intento agregar esa sintaxis al bloque de dependencias de mi aplicación, obtengo algunos errores de sintaxis. Como esto está escrito ahora, es un poco difícil saber con precisión dónde lo agrega.
OYRM
1
@OYRM: "¿dónde está agregando esa directiva androidTestCompile?" - en dependencies. Ver esta muestra de Chiu-Ki Chan.
CommonsWare
16
El paso n. ° 6 es clave aquí
Odaym,
146

Lo que hice para resolverlo fue agregar la siguiente línea a mi script build.gradle

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

Reemplace xx.x.xcon cualquier versión de anotaciones de soporte que esté usando su aplicación; esto se mostrará en sus dependencias o en el mensaje de sincronización de Gradle como: Resolved version for app (xx.x.x)si hubiera un problema de sincronización.

Renan Nery
fuente
Guau. Hago esto para actualizar, Junitpero totalmente para obtenerlo, puedo hacerlo también para otras dependencias.
Jared Burrows
10
De hecho, así es como lo hacen las muestras de Google , un comentario que dice "Forzar el uso de anotaciones de soporte en la aplicación de prueba, ya que es utilizado internamente por el módulo del corredor".
desseim
Esta fue la mejor respuesta para mí. Nota: Debe actualizar a '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl
Gracias, en mi caso, la línea ya estaba allí, pero declaraba explícitamente una versión conflictiva, actualizada a la requerida y todo funcionó de maravilla.
RAM237
¿Cómo agregar esto al build.gradle?
ubuntu_noob
58

En realidad, es un error de la nueva versión de actualización de Espresso Contrib, puede consultar esta solución alternativa: android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
óseo
fuente
2
Este fue mi problema. El boleto ya está aquí .
theblang
3
Esto crea una advertencia, la solución de @ RenanNery es mejor
Diego Palomar
Eso no funciona Todavía recibo el error de conflicto debido aandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky
1
@bony - Enlace roto
Mushtaq Jameel
Esto funcionó para mí. Puse este bloque en el "android {testOptions {<here>}}"
jwehrle
23

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

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

Esto resolvió mi problema.

Alternativamente, puede ejecutar gradlew en Windows y ./gradlew para mac / linux, esto descargará su dependencia cuando sea necesario

maruti060385
fuente
1
Esto también me ayudó hoy (10/11/2018), pero con la versión 26.1.0, para evitar un conflicto con la versión 27.1.1.
JB Rainsberger
8

También me encontré con este problema, así como con otros conflictos relacionados con appcompat y la solución que encontré fue agregar compilaciones de prueba y configurarlas en el SDK que está utilizando actualmente. En mi caso son 25, así que se ve así:

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.+'

Además, como puede ver, agregué la dependencia de diseño, que está relacionada con Android Material Design.

Espero que ayude =)

gmartinsnull
fuente
8

para sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'
dc10
fuente
3

puede ejecutar gradlew en Windows y ./gradlew para mac / linux, esto descargará su dependencia cuando sea necesario.

Puede verificar si una de las bibliotecas depende de la anotación de soporte o si alguna de las bibliotecas tiene un nombre erróneo e intentar excluirla en gradle, como se muestra a continuación.

compilar ("org.apache.maven: maven-ant-task: $ {mavenAntTaskVer} ‌") {excluir grupo: 'junit'}

Error: conflicto con la dependencia 'junit: junit'. Las versiones resueltas para la aplicación (3.8.1) y la aplicación de prueba (4.12) difieren. Ver g.co/androidstudio/app-test-app-conflict para más detalles.

este era el error que recibía, así que utilicé la línea de arriba para solucionar el problema

maruti060385
fuente
Esta parece una muy buena manera de resolver un problema como este. Y además, intente ejecutar esta línea de comando ./gradlew: app: dependencies bajo el directorio raíz de su proyecto, hará un árbol sobre las dependencias de su proyecto y verificará cuidadosamente, luego encontrará de dónde proviene el conflicto.
Frank Jorsn
2

Simplemente elimine estas líneas en su archivo build.gradle:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
shiv om Bhardwaj
fuente
No funciona de esa manera. Causa más errores en el proyecto
0

Este es un problema común en la prueba de instrumentación como se indica aquí y se puede resolver simplemente agregando las dependencias para androidTestCompile dentro de build.gradle. En mi caso, surgieron conflictos en las dependencias de appcompat, de la vista de reciclaje y del diseño. Y resuelto agregando las siguientes líneas

    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'
cammando
fuente
0

Estaba teniendo el mismo problema con 26.0.0 y 27.1.1 y en realidad solo actualicé la primera a la última para que funcione.

Arma X
fuente