Мы настраиваем сервер непрерывной интеграции для нашей разработки под Android, и мы быстро столкнулись с ожиданием проблем с устройством в АБР .
Для записи, мы уже пробовали много комбинаций adb kill-server
, adb start-server
, adb devices
и т.д., но безрезультатно.
К сожалению, все, что я нашел в интернете, это варианты «отключить и снова подключить устройство», что, очевидно, не является для нас решением (мы не можем позволить человеку сидеть рядом с CI-сервером, чтобы отключить и снова подключить устройства перед каждая сборка).
В качестве предыстории мы используем Jenkins на Mac, поскольку он также запускает наш CI для iOS.
Подходя к проблеме, я подумал, что если на уровне ОС устройство найдено, то это как минимум начало. Действительно, выполнение команды like system_profiler SPUSBDataType
успешно находит устройство, включая серийный номер, который ADB сообщает при правильной работе.
Я попытался выполнить несколько довольно слабых команд, чтобы «обновить» всю активность USB, но я никуда не попал. Дело не в том, что вы можете монтировать / размонтировать устройство, но, честно говоря, я даже не уверен, в чем проблема, я недостаточно знаю о низкоуровневых USB-протоколах, не говоря уже о Mac. Мое скрытие исходного кода АБР было очень, очень длинным выстрелом.
Так что на данный момент я полностью заинтересован в решении, которое позволило бы нам постоянно запускать Android на нашем CI-сервере. Будь то несколько команд перед каждой работой Дженкинса, исправление ADB или любой другой фокус черной магии.