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
- Travis CI - Android Project Build Failing
- Almacenamiento en caché del SDK de Android en Travis CI
- ¿Hay alguna manera de ejecutar un conjunto específico de pruebas en un proyecto de Android Gradle?
- ¿Por qué Travis CI descarga todo lo que construye cada vez?
- ¿Cómo configurar un emulador que ejecuta API 25 usando una matriz de compilación en Travis CI?
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!
- La construcción de Travis CI no funciona con Android Constraint Layout
- Travis CI Android Tests: no hay dispositivos conectados
- Travis.yml ./gradlew: Permiso denegado
- Dependencias de Gradle con Travis CI en proyecto Android
- Las pruebas de Android fallan en Travis con ShellCommandUnresponsiveException
- Travis-CI Android pruebas con Gradle mantener el tiempo de espera
- Travis CI para Android
- No se puede construir el proyecto con Travis-CI y Android
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ó :
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
- Robolectric: ejecutar múltiples pruebas falla
- Android: Notificación personalizada de brindis hereda toast predeterminado