Saltar al contenido

Error de compilación de Android espresso-contrib gradle

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), el design soporte lib descargado como parte de la dependencia transitiva de espresso-contrib lib no pudo encontrar la versión compatible de appcompat-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 como
appcompat-v7,recyclerview-v7,etc.

El gráfico de dependencia para la configuración anterior se ve a continuación:
ingrese la descripción de la imagen aquí

Como se puede ver que espresso-contrib 2.2.1lib tiene dependencias transitivas en la versión 23.0.1 de
support-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:
ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.