Archivo de clase para android.support.v4.widget.DrawerLayoutImpl no se encuentra en travis support-v4 21.0

Estamos tratando de hacer pruebas en travis CI. Tenemos una clase que usa android.support.v4.widget.DrawerLayout .

Cuando utilizamos la biblioteca de soporte v4 de Android
build.gradle ->

 targetSdkVersion: 19 `compile 'com.android.support:support-v4:20.0.0'` 

.travis.yml

 - build-tools-19.1.0 - android-19 - extra-android-support - extra-google-google_play_services - extra-google-m2repository 

No recibimos este error, pero al usar

build.gradle ->

 targetSdkVersion: 21 com.android.support:support-v4:21.0.+ 

.travis.yml

 - build-tools-21.0.1 - android-21 - extra-android-support - extra-google-google_play_services - extra-google-m2repository 

Recibimos el error

  private static class IdlingDrawerListener implements DrawerListener, IdlingResource { ^ class file for android.support.v4.widget.DrawerLayoutImpl not found /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:200: error: cannot find symbol private ResourceCallback callback; ^ symbol: class ResourceCallback location: class IdlingDrawerListener /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:255: error: cannot find symbol public void registerIdleTransitionCallback(ResourceCallback callback) { ^ symbol: class ResourceCallback location: class IdlingDrawerListener /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:153: error: method setDrawerListener in class DrawerLayout cannot be applied to given types; drawer.setDrawerListener(IdlingDrawerListener.getInstance(existingListener)); ^ required: DrawerListener found: IdlingDrawerListener reason: actual argument IdlingDrawerListener cannot be converted to DrawerListener by method invocation conversion /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:192: error: cannot find symbol instance = new IdlingDrawerListener(); ^ symbol: constructor IdlingDrawerListener() location: class IdlingDrawerListener /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:193: error: method registerIdlingResources in class Espresso cannot be applied to given types; Espresso.registerIdlingResources(instance); ^ required: IdlingResource[] found: IdlingDrawerListener reason: argument type IdlingDrawerListener does not conform to vararg element type IdlingResource /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:205: error: non-static variable this cannot be referenced from a static context this.parentListener = parentListener; ^ /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:205: error: cannot find symbol this.parentListener = parentListener; ^ symbol: variable parentListener /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:208: error: method does not override or implement a method from a supertype @Override ^ /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:215: error: method does not override or implement a method from a supertype @Override ^ /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:256: error: non-static variable this cannot be referenced from a static context this.callback = callback; ^ /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:256: error: cannot find symbol this.callback = callback; ^ symbol: variable callback /home/travis/build/something/sample/src/test/java/com/abc/somesample/espresso/DrawerActions.java:254: error: method does not override or implement a method from a supertype @Override ^ 

Travis incluso muestra que ha descargado e instalado Android Support Library revisión 21, pero sigue siendo el error anterior.

Actualizar:

Hemos intentado ejecutar pruebas en el VM creado por los chicos de travis.

  • Las pruebas fallaron con el mismo error cuando se ejecutó en la máquina inicialmente.
  • Se ha intentado copiar manualmente internal_impl-21.0.0.jar encuentra dentro del archivo support-v4 aar en nuestro directorio libs/ y las pruebas pasadas.
  • Manualmente instalado Android SDK tools 23.0.5 en la VM y las pruebas pasaron.

Nuestro proyecto .travis.yml tiene las siguientes líneas:

- tools - platform-tools - build-tools-21.1.1 - android-21 - extra-android-support - extra-android-m2repository - extra-google-m2repository Todavía las pruebas están fallando en travis.

Esto suena como un error en travis. Si no utiliza Gradle para construir todo, pero hace algo de construcción por su cuenta (que suena como, dado que tiene archivos especiales YAML lista de dependencias), que necesita para manejar las dependencias de archivos AAR no sólo incluye classes.jar, pero jarras Bajo libs / también.

Añadiendo manualmente la biblioteca al servidor en build.gradle trabajado:

 testCompile fileTree(dir: "${rootDir}/YourProject/build/intermediates/exploded-aar/com.android.support/support-v4/", include: "**/*.jar") 

Respuesta editada:

Este problema se soluciona utilizando la clase DrawerActions.java precompilada de la librería espresso-contrib . Para obtener instrucciones de configuración, consulte el enlace .

1. ActionBarDrawerToggle: depreciación, nuevo estilo de versión para Lollipop y muestras actualizadas

DrawerLayout tiene una interfaz anidada DrawerListener implementada por:

  1. Android.support.v4.app.ActionBarDrawerToggle (desaprobado en la API 21) .
  2. Android.support.v7.app.ActionBarDrawerToggle (versión recomendada) .

La nueva versión de soporte-v7-appcompat es compatible con Android Lollipop y el estilo de diseño de material .

Consulta esta respuesta para actualizarla, o la implementación de la aplicación de E / S de Google y la muestra de Google .

Requiere la versión más reciente del SDK, appcompat-v7.21.0. +, Support-v4.21.0. + Y Android Support Repository.


2. Configuración de Travis: Se necesitan las últimas herramientas SDK, herramientas de plataforma, herramientas de construcción y repositorio extra-m2.

Agregue extra-android-m2repository y build-tools-21.1.1 a android: components:

Travis CI para proyectos Android utiliza herramientas 23.0.2 por defecto, Lollipop requiere herramientas SDK 23.0.5 .

Importante: Para descargar los componentes del sistema Android más recientes desde el Administrador de SDK de Android, primero debe actualizar las herramientas de SDK a la versión más reciente y reiniciar el Administrador de SDK. Si no lo hace, los últimos componentes del sistema Android no estarán disponibles para su descarga.

Es necesario actualizar las tools SDK primero para que obtenga las últimas revisiones de los otros componentes. Herramientas v23.0.5 requiere platform-tools v19 + para actualizarse y v21 + para trabajar. Además de la plataforma, sys-img, etc. Pruebe esto:

 android: components: # Uncomment the lines below if you want to # use the latest revision of Android SDK Tools - platform-tools - tools - build-tools-21.1.1 - android-21 - extra-android-support - extra-android-m2repository - extra-google-m2repository - extra-google-google_play_services - sys-img-armeabi-v7a-android-21 licenses: - 'android-sdk-license-5be876d5' 

3. Importante: Los proyectos basados ​​en Gradle requieren un repositorio extra-android-m2 sin soporte extra-android

extra-android-m2repository contiene los artefactos (archivos .aar) para gradle / android studio.

Nota: si estás desarrollando con Android Studio, selecciona e instala el ítem Android Support Repository (de la Biblioteca de soporte de Android en Eclipse).

Más información para Android Studio: https://developer.android.com/tools/support-library/setup.html


4. La clase DrawerLayoutImpl que falta en el archivo android.support:support-v4:21.0.2 interno .jar

Falta de DrawerLayoutImpl

Puede intentar cambiar 21.0.+ 21.0.2 . No estoy seguro del flujo de trabajo de resolución de dependencias de Travis-ci.

 compile 'com.android.support:support-v4:21.0.2' compile 'com.android.support:appcompat-v7:21.0.2' 

No lo sé, pero tal vez copia otra versión de android.support sin la clase de falta interna y jar.

Compruebe si el tarro interno está allí agregando algo como esto a su estructura:

 export MOD_NAME= yourapplicationmodulename 'cat ${TRAVIS_BUILD_DIR}/${MOD_NAME}/build/intermediates/tmp/dex/debug/libraryList.txt' 

Si usas 21.0. + Y descarga la versión m2repository 21.0.0 pero luego busca versiones actualizadas en maven fundó Android Support Library, revisión 21.0.1 sin el aar, así que prueba la nueva versión 21.0.2.


5. Espresso o doble Espresso, DrawerActions, frasco espresso-contrib y otras dependencias

Acerca de Espresso y otras dependencias transitivas a bibliotecas de soporte antiguo, puede intentar actualizarlas o excluir las dependencias de android.support:

 configurations { compile.exclude group: 'com.android.support' } 

No estoy familiarizado con Double espresso , un puerto Gradle puro de la utilidad de prueba Espresso para Android, pero Jake Wharton escribe aquí ( tema relacionado ):

Dependencias Duplicadas

Debido a un error en el complemento de Android actual, es posible que deba excluir las dependencias que se duplican en la aplicación y en la aplicación de prueba.

Por ejemplo, si tiene una dependencia de Dagger necesitará excluirla manualmente de la dependencia de prueba por el momento.

AndroidTestCompile ('com.jakewharton.espresso: espresso: 1.1-r3') {
Excluir grupo: 'com.squareup.dagger'} A continuación se muestran las dependencias de Espresso que pueden necesitar ser excluidas temporalmente:

Com.squareup.dagger: dagger: 1.2.1 … y las del módulo 'support-v4':

Com.android.support:support-v4:21.0.0 <———–

Acerca de Espresso , he leído que soporta hasta kitkat, pero no sé si Lollipop ahora es totalmente compatible y he encontrado un tema relacionado sobre Espresso.registerIdlingResources (instancia) y cito de aquí :

A veces usted quiere usar una versión de Espresso donde usted está en control de las dependencias Por ejemplo, Espresso utiliza Hamcrest Matchers y por lo tanto tiene una dependencia explícita en él. Para evitar errores al Dexar el código de prueba , puede usar la versión sin dependencias de Espresso y declarar explícitamente sus dependencias

Si necesita alguna funcionalidad de la librería contrib, como DrawerActions , copie el frasco espresso-contrib desde aquí . Espresso para usar un DrawerLayout .


6. Paso de encogimiento de ProGuard: reglas de actualización para los cambios de la API 21

Estoy utilizando la implementación de aplicaciones de Google I / O como he visto que estás haciendo para aprender Material Design y todo esto. Recientemente actualizaron la aplicación, añadieron app-compat y cajón de navegación fijo, pero creo que no actualizaron las reglas de ProGuard. Si está utilizando una configuración similar, sugiero que la actualice y verifique las reglas aapt para asegurarse de que las clases que faltan se mantienen.

Como una muestra experimental, estoy aprendiendo también, He añadido el nuevo API 21 View constructor y includedescriptorclasses

 # Added includedescriptorclasses for unkept android.support descriptors -keep,includedescriptorclasses public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public <init>(android.content.Context, android.util.AttributeSet, int, int); # Added in API 21 public void set*(...); 

Y se resolvieron 43 de 44 notas sobre descriptores no manipulados, incluidas

Nota: la configuración mantiene el punto de entrada 'android.support.v4.widget.DrawerLayout {void setDrawerListener (android.support.v4.widget.DrawerLayout $ DrawerListener); } ', Pero no la clase del descriptor' android.support.v4.widget.DrawerLayout $ DrawerListener '

Es posible que te encuentres con este problema (?) https://code.google.com/p/android/issues/detail?id=77682#c11 .

El último comentario, por @Tor Norbye, irónicamente :), dice

El problema del cargador de clases está fijado para 0.8.14. El problema de sincronización gradle tiene que ser fijado en el lado del modelo en Gradle 0.14.

Después de varias pruebas, funcionó para mí agregar la dependencia:

 compile 'com.android.support:internal_impl:22.2.0' 

Desafortunadamente, usted tiene que mantener este JAR actualizado, cuando cambia la versión 'support' lib.

  • Dependencias de Gradle con Travis CI en proyecto Android
  • Falso positivos: junit.framework.AssertionFailedError: EditText no se encuentra
  • ¿Cuál es la mejor práctica para usar keystores para firmar la versión de lanzamiento de una aplicación para Android en Travis CI?
  • Uso de Travis CI con Android
  • Travis-CI Android pruebas con Gradle mantener el tiempo de espera
  • Cómo ejecutar Prueba Travis-CI y Espresso
  • Las pruebas de Android fallan en Travis con ShellCommandUnresponsiveException
  • ¿Cómo burlar el buildConfigField de Gradle para la construcción de Travis CI?
  • Retrolambda en Travis CI
  • Travis CI - Android Project Build Failing
  • Cómo corregir el permiso gradlew denegado en travis.yml?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.