No se puede configurar travis para trabajar en el proyecto android

He encontrado varios problemas con Travis CI y he estado resolviéndolos, pero el último no puedo.

Estoy recibiendo el error común com.android.ddmlib.InstallException: Failed to establish session

Este es mi archivo travis:

 language: android before_install: - chmod +x gradlew 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 - tools - build-tools-23.0.3 # Additional components - extra-google-m2repository - extra-android-m2repository # The SDK version used to compile your project - android-23 # Specify at least one system image, # if you need to run emulator(s) during your tests - sys-img-armeabi-v7a-android-23 #- sys-img-x86-android-17 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 --name test --target android-23 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window -gpu off -no-boot-anim & - android-wait-for-emulator - adb devices - adb shell input keyevent 82 & script: - echo $ADB_INSTALL_TIMEOUT - android list target - ./gradlew connectedAndroidTest after_failure: # Customize this line, 'android' is the specific app module name of this project. Shows log. - export MY_MOD="SimpleLock" - export MY_LOG_DIR="$(pwd)/app/build/reports/androidTests/connected/" - pwd && cd "${MY_LOG_DIR:-.}" && pwd && ls -al - sudo apt-get install -qq lynx && lynx --dump index.html > myIndex.log - lynx --dump com.android.builder.testing.ConnectedDevice.html > myConnectedDevice.log - lynx --dump com.android.builder.testing.html > myTesting.log - for file in *.log; do echo "$file"; echo "====================="; cat "$file"; done || true 

Y esta es mi salida de travis: https://travis-ci.org/GarceGon/SimpleLock/builds/139367600

 :app:connectedDebugAndroidTestUnable to install /home/travis/build/GarceGon/SimpleLock/app/build/outputs/apk/app-debug.apk com.android.ddmlib.InstallException: Failed to establish session at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:66) at com.android.ddmlib.Device.installPackages(Device.java:901) at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:119) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:121) 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) com.android.builder.testing.ConnectedDevice > runTests[test(AVD) - 6.0] FAILED com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:129) null com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:129) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:121) 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: Failed to establish session at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:66) at com.android.ddmlib.Device.installPackages(Device.java:901) at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:119) ... 8 more :app:connectedDebugAndroidTest FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:connectedDebugAndroidTest'. > There were failing tests. See the report at: file:///home/travis/build/GarceGon/SimpleLock/app/build/reports/androidTests/connected/index.html * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 2 mins 20.531 secs The command "./gradlew connectedAndroidTest" exited with 1. 

¡Gracias!

Solución:

Elimine la opción -no-boot-anim para esperar que el emulador esté listo y aumente el tiempo de espera a 10 minutos.


Primer problema:

Reemplazar

  - emulator -avd test -no-skin -no-audio -no-window -gpu off -no-boot-anim & 

Por

  - emulator -avd test -no-skin -no-audio -no-window -gpu off & 

Eliminación de la opción no-boot-anim , la secuencia de comandos android-wait-for-emulator depende de la animación de arranque para detectar cuándo el emulador está listo mientras explico aquí .

Hice tu proyecto para confirmarlo en una sucursal de desarrollo y la construcción de Travis-CI pasó pero …


Segunda edición:

Más tarde recreé el cambio utilizando la rama maestra y la compilación falló …

 Caused by: com.android.ddmlib.ShellCommandUnresponsiveException 

Ya has arreglado esta versión del tema muy bien explicada por Sean Barbeau:

 # install timeout in minutes (2 minutes by default) - ADB_INSTALL_TIMEOUT=8 

Y también arregló otro problema de tiempo de espera explicado aquí y aquí que necesita más tiempo, consulte :

El complemento Android Gradle tenía un valor de tiempo de espera codificado difícil que era demasiado bajo.

Google lo arregló (versión 2.0.0-beta3):

https://code.google.com/p/android/issues/detail?id=189764

Entonces, ¿qué ponemos en build.gradle para establecer este valor de tiempo de espera?

Actualmente, todo está asociado a android.adbOptions.timeOutInMs.

Ejemplo: Proyecto de Google Aumentar el tiempo de espera del ADB y agregar soporte de Travis-ci . Funciona !

 // This enables long timeouts required on slow environments, eg Travis adbOptions { timeOutInMs 10 * 60 * 1000 // Set the timeout to 10 minutes installOptions "-d","-t" } 

He aumentado el tiempo de espera de 1 a 10 minutos como Mark McDonald, y la construcción pasó :

Introduzca aquí la descripción de la imagen

Intenta algunas cosas

  • Asegúrese de que Emulator se ha iniciado / El dispositivo está conectado
  • Reinicie el adb con $ adb kill-server
  • Compruebe que la configuración del emulador "Usar host GPU" esté activada
  • ¿Hay una manera de iniciar el emulador de Android en Travis CI construir?
  • Archivo de clase para android.support.v4.widget.DrawerLayoutImpl no se encuentra en travis support-v4 21.0
  • Uso de Travis CI con Android
  • Cómo ejecutar Prueba Travis-CI y Espresso
  • Com.android.builder.testing.ConnectedDevice> hasTests FALLA
  • Error de generación de Travis Ci causado por los acuerdos de licencia de Android SDK
  • ¿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?
  • La construcción de Travis CI falló
  • Travis CI se queda atascado en la creación de herramientas de construcción en Android
  • ¿Es gradlew obligatorio para que travis CI funcione?
  • Error de compilación de Android: filtro de paquete desconocido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.