Si encuentras alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.
Solución:
TL; DR;
Nueva versión de espresso-contrib 2.2.2
la biblioteca ahora depende de com.android.support:appcompat-v7:23.1.1
resultando en conflicto cuando se usa una versión diferente de appcompat-v7
en nuestro compile
dependencia del tiempo como a continuación:
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2'
Para evitar conflictos cuando excluimos appcompat-v7
dependencia de espresso-contrib
como a continuación, se rompe de nuevo debido a algunas dependencias de valor en design support
lib.
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2')
exclude module: 'support-annotations'
exclude module: 'support-v4'
exclude module: 'support-v13'
exclude module: 'recyclerview-v7'
exclude module: 'appcompat-v7'
Error:
Error: (69) Error al recuperar el elemento principal del elemento: no se encontró ningún recurso que coincida con el nombre de pila 'TextAppearance.AppCompat.Display1'.
Causa principal:
Esto se debe a que
design
support lib depende de
appcompat-v7
.
Entonces, cuando excluimos el módulo 'appcompat-v7' de
espresso-contrib
dependencias (como arriba), eldesign
soporte lib descargado como parte de la dependencia transitiva deespresso-contrib
lib no pudo encontrar la versión compatible deappcompat-v7 lib(23.1.1)
está utilizando internamente en sus archivos de recursos y, por lo tanto, emite el error anterior.
Entonces, la solución al problema anterior es excluir la dependencia de lib 'soporte de diseño' de espresso-contrib
como abajo:
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2')
exclude module: 'support-annotations'
exclude module: 'support-v4'
exclude module: 'support-v13'
exclude module: 'recyclerview-v7'
exclude module: 'design'
¡Eso resuelve el problema del conflicto!
VERSIÓN MÁS LARGA (en caso de que alguien esté interesado):
Para descubrir las razones de varios problemas de conflicto que enfrentamos al usar la biblioteca `espresso-contrib ', he creado una aplicación de muestra para averiguar la causa raíz.
Step 1:Using Espresso-Contrib Lib version 2.2.1
Aplicación creada para usar 'espresso-contrib' versión lib 2.2.1 agregando las siguientes líneas en app/build.gradle
expediente:
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1'
Nota: En este caso, no estoy importando ningún otro componente de la biblioteca de soporte comoappcompat-v7,recyclerview-v7,etc
.
El gráfico de dependencia para la configuración anterior se ve a continuación:
Como se puede ver que espresso-contrib 2.2.1
lib tiene dependencias transitivas en la versión 23.0.1 desupport-v4
,recyclerview-v7
,support-annotations
, etc.
Como no estoy definiendo dependencias para recyclerview-v7
,support-annotations
en mi proyecto, la configuración anterior funcionaría bien.
Pero cuando los definimos como dependencias de compilación [like below] en nuestro proyecto obtenemos problemas de conflicto de versiones como se indica en su pregunta.
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:support-v4:23.3.0'
Para evitar esos conflictos, agregamos la siguiente línea a nuestra lib espresso-contrib:
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1')
exclude module: 'support-annotations'
exclude module: 'support-v4'
exclude module: 'support-v13'
exclude module: 'recyclerview-v7'
Esto asegura que esas dependencias no se descarguen como parte de espresso-contrib
dependencias transitivas.
Todo funciona bien con la configuración anterior. ¡Sin problemas!
Step 2: Using Espresso-Contrib lib version 2.2.2
Se cambió build.gradle de la aplicación para usar 'espresso-contrib' versión lib 2.2.2 cambiando el archivo build.gradle anterior:
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:support-v4:23.3.0'
testCompile 'junit:junit:4.12'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2')
exclude module: 'support-annotations'
exclude module: 'support-v4'
exclude module: 'support-v13'
exclude module: 'recyclerview-v7'
Pero cuando construyo el proyecto usando la configuración anterior ... la construcción falla con el error publicado en la pregunta ...
Error:
Error: conflicto con la dependencia 'com.android.support:appcompat-v7'. Las versiones resueltas para la aplicación (23.3.0) y la aplicación de prueba (23.1.1) difieren. Consulte http://g.co/androidstudio/app-test-app-conflict para obtener más detalles.
Entonces, mirando el error, agregué una línea más a build.gradle anterior:
exclude module: 'appcompat-v7' (inside androidTestCompile block of espresso-contrib)
Pero eso no resuelve el problema del conflicto y obtengo un error de dependencias de valor publicado en los comentarios.
Así que vuelvo a comprobar el gráfico de dependencia de mi aplicación:
Como se puede ver ahora que espresso-contrib 2.2.2
lib ahora tiene dependencia transitiva de com.android.support:design:23.1.1
causando el conflicto anterior.
Entonces, necesitamos agregar la línea debajo dentro androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2')
cuadra:
exclude module: 'design'
¡Esto resuelve el problema del conflicto en la versión 2.2.2 de lib!
Por alguna razón, también me ha comenzado a pasar de la nada.
Lo único que lo resolvió fue invalidar cachés y reiniciar
Puntuaciones y reseñas
Si entiendes que ha resultado provechoso este artículo, agradeceríamos que lo compartas con otros programadores de esta forma contrubuyes a extender nuestra información.