Travis CI Android Tests: no hay dispositivos conectados

Estoy tratando de configurar Travis para Android. Ejecutar la compilación parece funcionar hasta ahora, pero cuando se trata de las pruebas, se queja de "No hay dispositivos conectados!"

:app:connectedAndroidTestDebug FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:connectedAndroidTestDebug'. > com.android.builder.testing.api.DeviceException: java.lang.RuntimeException: No connected devices! 

Aquí está mi .travis.yml, y por lo que entiendo, estoy creando e iniciando un emulador para las pruebas, tal como lo dice la documentación .

 language: android android: components: # Uncomment the lines below if you want to # use the latest revision of Android SDK Tools # - platform-tools # - tools # The BuildTools version used by your project - build-tools-22.0.1 # The SDK version used to compile your project - android-22 # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository # - addon-google_apis-google-19 # - add-on # - extra # Specify at least one system image, # if you need to run emulator(s) during your tests - sys-img-armeabi-v7a-android-22 # - sys-img-x86-android-17 licenses: - 'android-sdk-license-.+' # Emulator Management: Create, Start and Wait before_script: - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & 

¿Puedes decirme qué estoy haciendo mal y cómo solucionarlo?

Desafortunadamente no estoy autorizado a comentar, ya que sólo quiero completar la respuesta de DominicJodoin. La sangría correcta y un ADB_INSTALL_TIMEOUT más ADB_INSTALL_TIMEOUT es necesario como DominicJodoin ya declaró.

En mi opinión, su emulador se está ejecutando pero no está listo para instalar un apk. Con - adb wait-for-device espera hasta que el dispositivo se conecte. Según la Documentación esto significa:

Tenga en cuenta que este comando no hace que adb espere hasta que el sistema completo se arranque completamente. Por esta razón, no debe prependerlo a otros comandos que requieran un sistema completamente arrancado.

Intenta reemplazar esta línea con - android-wait-for-emulator en tu travis.yml en su lugar.

Travis.yml

 language: android jdk: oraclejdk7 cache: directories: - node_modules sudo: false android: components: # Uncomment the lines below if you want to # use the latest revision of Android SDK Tools # - platform-tools # - tools # The BuildTools version used by your project - build-tools-22.0.1 # The SDK version used to compile your project - android-22 # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository # - addon-google_apis-google-19 # - add-on # - extra # Specify at least one system image, # if you need to run emulator(s) during your tests - sys-img-armeabi-v7a-android-21 # - sys-img-x86-android-17 licenses: - 'android-sdk-license-.+' env: global: # install timeout in minutes (2 minutes by default) - ADB_INSTALL_TIMEOUT=8 # Emulator Management: Create, Start and Wait before_script: - echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & script: - android list target - ./gradlew connectedAndroidTest 

Editar: sangría fija en el fragmento YAML anterior.

Creo que tu problema es que la imagen de sys-img-armeabi-v7a-android-22 no está disponible todavía en Travis CI.

De hecho, si ejecuta el siguiente comando en Travis CI: android list target , la salida para android-22 no muestra Tag/ABIs : no ABIs.

Sugiero que intente ejecutar sus pruebas en el sys-img-armeabi-v7a-android-21 mientras tanto.

Usted puede echar un vistazo a un ejemplo de proyecto de Android con pruebas de unidad que bifurcó y se ejecutó con éxito con sus componentes, pero con la imagen de sys-img-armeabi-v7a-android-21 en Travis CI:

  • Ejemplo de proyecto
  • Registro de construcción de Travis CI

¡Espero que esto ayude!

Editar: la imagen de android-22 debería estar disponible en breve en Travis CI. Consulte la siguiente solicitud de extracción .

He encontrado la clave ADB_TIMEOUT_INSTALL bit en J-Bossi respuesta, y se inicia el emulador en before_script como Travis-CI está recomendando, pero tuve problemas con la máquina virtual que se queda sin memoria. Así que en lugar de ejecutar el emulador mientras la compilación se está ejecutando, cambié mi configuración para ejecutar la compilación, luego iniciar el emulador y luego ejecutar las pruebas.

 sudo: false language: android env: global: # switch glibc to a memory conserving mode - MALLOC_ARENA_MAX=2 # wait up to 10 minutes for adb to connect to emulator - ADB_INSTALL_TIMEOUT=10 android: components: - platform-tools - extra-android-m2repository - build-tools-22.0.1 - android-22 - sys-img-armeabi-v7a-android-22 script: - ./gradlew assemble lint after_script: # Emulator Management: Create, Start and Wait - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & # now run the tests - ./gradlew connectedCheck 
  • Travis CI para Android
  • ¿Cómo debo configurar Travis-CI para una biblioteca de Android?
  • Travis.yml ./gradlew: Permiso denegado
  • Travis CI falló porque no puede aceptar licencia Constrain Layout
  • ¿Es gradlew obligatorio para que travis CI funcione?
  • ¿Hay alguna manera de ejecutar un conjunto específico de pruebas en un proyecto de Android Gradle?
  • La construcción de Travis CI falló
  • Falso positivos: junit.framework.AssertionFailedError: EditText no se encuentra
  • Travis CI se queda atascado en la creación de herramientas de construcción en Android
  • ¿Por qué Travis CI descarga todo lo que construye cada vez?
  • Las pruebas de Android fallan en Travis con ShellCommandUnresponsiveException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.