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

Después de actualizar a la API 22 y a la revisión 22 de la versión de soporte, 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) son diferentes.

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

No tengo dependencias declaradas con 21.0.3 … ¿es una de las bibliotecas dependientes que usa 21.0.3 y Google olvidó actualizarla con el rest del lote?

Mi build.gradle con 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 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 (*) 

El paso # 1 cuando se trata de 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 (p. Ej., gradle -q app:dependencies de 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 conflictivas de artefactos.

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

El paso 4 consiste en agregar la directiva de exclude 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 para probar el cambio. Lo que estás haciendo es decir que espresso-contrib tiene que lidiar con la edición 22.0.0 de support-annotations de support-annotations . Eso puede funcionar Eso puede no. Depende de la compatibilidad con versiones anteriores del conflicto. En este caso, support-annotations deberían ser bastante buenas al respecto.

El paso n. ° 6 es consumir la bebida de su elección, una adecuada para su localidad y hora del día.

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

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

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

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

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

También me encontré con este problema, así como con otros conflictos relacionados con appcompat, y la solución que encontré fue agregar comstackciones 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 pueden ver, agregué la dependencia del diseño, que está relacionada con el Diseño de Material de Android.

Espero que ayude =)

para sdkversion 25

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

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

Puede verificar si una de las bibliotecas tiene una dependencia en la anotación de soporte o si hay alguna biblioteca con un nombre erróneo e intente excluirla en gradle, como a continuación.

comstackr (“org.apache.maven: maven-ant-tasks: $ {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) son diferentes. Ver g.co/androidstudio/app-test-app-conflict para más detalles.

este fue el error que estaba recibiendo, así que utilicé la línea gradle anterior para solucionar el problema

Simplemente borre 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' 

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, el conflicto surgió en las dependencias appcompat, recyclerview y design. 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' 

Estaba teniendo el mismo problema con 26.0.0 y 27.1.1 y, en realidad, actualizar el anterior para hacerlo funcionar más tarde.