¿La resolución de conflictos de Gradle no funciona con los proyectos de Android?

Estoy tratando de compilar un módulo cuyo árbol de dependencia parece

+--- com.squareup.burst:burst-junit4:1.0.2 | +--- com.squareup.burst:burst:1.0.2 | \--- junit:junit:4.11 -> 4.12 | \--- org.hamcrest:hamcrest-core:1.3 +--- com.android.support.test.espresso:espresso-core:2.0 | +--- com.squareup:javawriter:2.1.1 | +--- org.hamcrest:hamcrest-integration:1.1 | | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 | +--- org.hamcrest:hamcrest-library:1.1 | | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 | +--- com.android.support.test.espresso:espresso-idling-resource:2.0 | +--- com.android.support.test:testing-support-lib:0.1 | | \--- junit:junit-dep:4.10 | | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 | +--- com.google.code.findbugs:jsr305:2.0.1 | +--- javax.annotation:javax.annotation-api:1.2 | \--- org.hamcrest:hamcrest-core:1.1 -> 1.3 ... 

Como puedes ver, hay un hamcrest-core versión hamcrest-core , pero gradle parece reconocer el conflicto y aplicar su estrategia de "última versión" predeterminada, que es exactamente lo que quiero.

Sin embargo, al intentar ejecutar assembleDebugTest (ya sea manualmente oa través de Android Studio)

 com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/MatcherAssert; 

Algunas respuestas a preguntas similares sugieren exclude los frascos no deseados, pero he encontrado un montón de conflictos similares, y se está poniendo un poco fuera de control.

¿Por qué la estrategia de conflicto por defecto de gradle no quita el frasco más antiguo automáticamente? ¿El plugin androide gradle suprime esa funcionalidad?

Después de más excavaciones, parece que el problema es que mi árbol de dependencia contenía hamcrest-core 1.3 y hamcrest-integration 1.1, y MatcherAssert fue movido de hamcrest-integration a hamcrest-core entre esas versiones.

Así gradle estaba realizando la resolución de conflictos como documentado; Sólo había un conflicto entre distintos módulos que no esperaba.

Forcing 1.3 para los tres módulos hamcrest se encargó del problema.

  • Gradle - heredar el sabor del producto
  • ¿Cómo envío una Biblioteca de Android (aar) con dependencias remotas (gradle)?
  • Android Studio ignorar --core-library flag
  • Gradle versión 1.10 es necesario. La versión actual es 2.2.1. En android
  • No se puede construir el proyecto de biblioteca Bintray Gradle - ClassNotFoundException
  • Android studio - Error de secuencia de comandos de compilación, no compatible con el método Gradle DSL encontrado: 'android ()'!
  • Error: no se pudo encontrar el destino con la cadena de hash 'android-21'
  • Android Studio - Importar biblioteca externa / Jar
  • "Error: Atributo" estilo "ya se ha definido" error después de añadir facebook sdk de Maven
  • Agrega la API de datos de YouTube a Android Studio
  • Especificación de las dependencias de prueba con el sistema de compilación de Gradle Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.