Las pruebas de Android fallan en Travis con ShellCommandUnresponsiveException
Estamos viendo muchos fallos en la construcción de la primera e incluso segunda ejecución de solicitudes de extracción para nuestro proyecto de Android en Travis. Sin embargo, si reiniciamos exactamente la misma construcción muchas veces pasa.
Esto es lo que parece el error en los fallos:
- ¿Hay una manera de iniciar el emulador de Android en Travis CI construir?
- Error de compilación de Android: filtro de paquete desconocido
- Uso de Travis CI con Android
- ¿Cómo debo configurar Travis-CI para una biblioteca de Android?
- ¿Cómo configurar un emulador que ejecuta API 25 usando una matriz de compilación en Travis CI?
:onebusaway-android:connectedAndroidTest 09:48:14 E/Device: Error during shell execution: null Unable to install /home/travis/build/OneBusAway/onebusaway-android/onebusaway-android/build/outputs/apk/onebusaway-android-debug.apk com.android.ddmlib.InstallException at com.android.ddmlib.Device.installPackages(Device.java:927) at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:105) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:125) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: com.android.ddmlib.ShellCommandUnresponsiveException at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:513) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:390) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:359) at com.android.ddmlib.Device.executeShellCommand(Device.java:566) at com.android.ddmlib.Device.createMultiInstallSession(Device.java:987) at com.android.ddmlib.Device.installPackages(Device.java:884) ... 9 more com.android.builder.testing.ConnectedDevice > runTests[test(AVD) - 5.0.1] FAILED com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:108) null com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:108) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:125) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: com.android.ddmlib.InstallException at com.android.ddmlib.Device.installPackages(Device.java:927) at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:105) ... 8 more Caused by: com.android.ddmlib.ShellCommandUnresponsiveException at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:513) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:390) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:359) at com.android.ddmlib.Device.executeShellCommand(Device.java:566) at com.android.ddmlib.Device.createMultiInstallSession(Device.java:987) at com.android.ddmlib.Device.installPackages(Device.java:884) ... 9 more :onebusaway-android:connectedAndroidTest FAILED FAILURE: Build failed with an exception.
Estamos ejecutando pruebas en el emulador de Travis usando gradlew connectedTest
.
Aquí está nuestro .travis.yml:
# Test format changes to this .travis.yml file before submitting a PR with: # http://lint.travis-ci.org/OneBusAway/onebusaway-android language: android jdk: oraclejdk7 # Turn off caching to avoid any caching problems cache: false # Use the Travis Container-Based Infrastructure (see #203) sudo: false env: global: - ANDROID_API_LEVEL=21 - ANDROID_BUILD_TOOLS_VERSION=21.1.2 - ANDROID_ABI=google_apis/armeabi-v7a android: components: - platform-tools - tools - build-tools-$ANDROID_BUILD_TOOLS_VERSION - android-$ANDROID_API_LEVEL # For Google Maps API v1 - addon-google_apis-google-$ANDROID_API_LEVEL # Google Play Services - extra-google-google_play_services # Support library - extra-android-support # Latest artifacts in local repository - extra-google-m2repository - extra-android-m2repository # Specify at least one system image - sys-img-armeabi-v7a-addon-google_apis-google-$ANDROID_API_LEVEL before_script: # Create and start emulator - echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI - emulator -avd test -no-skin -no-audio -no-window & script: - ./wait_for_emulator - ./gradlew connectedCheck -PdisablePreDex # Integration with Gitter (https://gitter.im/OneBusAway/onebusaway-android) notifications: webhooks: urls: - https://webhooks.gitter.im/e/493b93a98ed03a010c4c on_success: change # options: [always|never|change] default: always on_failure: always # options: [always|never|change] default: always on_start: false # default: false
- Travis-CI Android pruebas con Gradle mantener el tiempo de espera
- Comenzando google-services.json a GitHub
- Travis CI - Android Project Build Failing
- No se puede configurar travis para trabajar en el proyecto android
- Falso positivos: junit.framework.AssertionFailedError: EditText no se encuentra
- ¿Cómo burlar el buildConfigField de Gradle para la construcción de Travis CI?
- Travis CI falló porque no puede aceptar licencia Constrain Layout
- ¿Hay alguna manera de ejecutar un conjunto específico de pruebas en un proyecto de Android Gradle?
Puede establecer la variable ambiental ADB_INSTALL_TIMEOUT
en Travis en un valor tal como 8 minutos para evitar este problema.
Por ejemplo, en su .travis.yml:
language: android jdk: oraclejdk7 # Turn off caching to avoid any caching problems cache: false # Use the Travis Container-Based Infrastructure sudo: false env: global: - ANDROID_API_LEVEL=21 - ANDROID_BUILD_TOOLS_VERSION=21.1.2 - ANDROID_ABI=armeabi-v7a - ADB_INSTALL_TIMEOUT=8 # minutes (2 minutes by default) android: components: - platform-tools - tools - build-tools-$ANDROID_BUILD_TOOLS_VERSION - android-$ANDROID_API_LEVEL
ShellCommandUnresponsiveException
está relacionado con el problema 69735 de AOSP: Ddmlib es demasiado agresivo con los tiempos de espera en Device.java , lo que provoca que ddmlib se apague rápidamente si no recibe entrada. La variable ambiental anterior amplía este tiempo de espera en la Travis VM.
También asegúrese de que está utilizando las herramientas SDK y Build más recientes del API (por lo menos la versión anterior), ya que las versiones anteriores no permiten establecer esta variable ambiental.
Tenga en cuenta que esto sólo puede resolver su problema si sus pruebas de vez en cuando pasar Travis – si su compilación siempre falla puede tener otros problemas en curso.
EDITAR Marzo 2016
Tenga en cuenta que si sigue viendo fallos, especialmente en el emulador de Nivel de API 23, hay otro problema de tiempo de espera de emulador que puede estar causándole problemas.
Para evitar esto, tendrás que actualizar tu plugin de Gradle a por lo menos 2.0.0-beta3
– por ejemplo:
dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta5' }
Para más detalles, consulte:
- Comandos de Gradle fallan en API 23 Imagen del emulador de la API de Google (armeabi-v7a)
- https://code.google.com/p/android/issues/detail?id=190200
- https://code.google.com/p/android/issues/detail?id=189764
- Conseguir Dagger para inyectar objetos simulados al hacer pruebas funcionales espresso para Android
- OverridePendingTransition para actividades deslizantes dentro y fuera suavemente