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