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 (*)

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.


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.


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

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


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 =)


8

para sdkversion 25

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

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


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'

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'

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.