Estamos configurando un servidor de integración continua para nuestro desarrollo de Android y nos hemos encontrado rápidamente con el problema de ADB a la espera del dispositivo .
Para el registro, ya hemos probado muchas combinaciones de adb kill-server
, adb start-server
, adb devices
, etc en vano.
Lamentablemente, todo lo que he encontrado en Internet son variaciones de "desconectar y volver a conectar el dispositivo", lo que obviamente no es una solución para nosotros (no podemos evitar que un ser humano se siente junto al servidor de CI para desconectar y volver a conectar dispositivos antes) cada construcción).
Como información básica, utilizamos Jenkins en una Mac, ya que también ejecuta nuestro CI para iOS.
Al abordar el problema, pensé que si en el nivel del sistema operativo se encuentra el dispositivo, eso es al menos un comienzo. De hecho, ejecutar un comando como system_profiler SPUSBDataType
encuentra con éxito el dispositivo, incluido el número de serie que informa ADB cuando funciona correctamente.
He intentado algunos comandos poco convincentes para "actualizar" toda la actividad de USB, pero no he ido a ninguna parte. No es que pueda montar / desmontar el dispositivo, pero para ser honesto, ni siquiera estoy seguro de dónde está el problema, no sé lo suficiente sobre protocolos USB de bajo nivel, y mucho menos para Mac. Mi acecho del código fuente de ADB fue muy, muy lejano.
Por lo tanto, en este punto, soy todo oídos para una solución que nos permita ejecutar Android constantemente en nuestro servidor CI. Ya sea unos pocos comandos antes de cada trabajo de Jenkins, parcheando ADB o cualquier otro truco de magia negra.