Estamos configurando um servidor de integração contínua para o nosso desenvolvimento Android e encontramos rapidamente o ADB aguardando um problema no dispositivo .
Para o registro, nós já tentamos um monte de combinações de adb kill-server
, adb start-server
, adb devices
, etc. sem sucesso.
Infelizmente, tudo o que encontrei na internet são variações de "desconecte e reconecte o dispositivo", o que obviamente não é uma solução para nós (não podemos poupar que um ser humano se sente no servidor de CI para desconectar e reconectar dispositivos antes cada compilação).
Como pano de fundo, usamos o Jenkins em um Mac, pois ele também executa nosso IC para iOS.
Ao abordar o problema, pensei que, se no nível do sistema operacional, o dispositivo for encontrado, isso é pelo menos um começo. De fato, a execução de um comando como o system_profiler SPUSBDataType
encontra com êxito o dispositivo, incluindo o número de série que o ADB relata ao funcionar corretamente.
Eu tentei alguns comandos bastante coxos para "atualizar" todas as atividades do USB, mas não fui a lugar algum. Não é que você possa montar / desmontar o dispositivo, mas, para ser sincero, nem sei ao certo onde está o problema, não sei o suficiente sobre protocolos USB de baixo nível, muito menos para Macs. Meu espreitar o código-fonte do ADB foi um tiro muito, muito longo.
Então, neste momento, sou totalmente a favor de uma solução que nos permita executar o Android de forma consistente no nosso servidor de IC. Seja alguns comandos antes de cada trabalho de Jenkins, remendando o ADB ou qualquer outro truque de magia negra.