Stiamo configurando un server di integrazione continua per il nostro sviluppo Android e ci siamo imbattuti rapidamente nell'attesa di ADB per il problema dei dispositivi .
Per la cronaca, abbiamo già provato molte combinazioni di adb kill-server
, adb start-server
, adb devices
, ecc senza alcun risultato.
Purtroppo, tutto quello che ho trovato su Internet sono le varianti di "scollegare e ricollegare il dispositivo", che ovviamente non è una soluzione per noi (non possiamo risparmiare un essere umano seduto sul server CI per scollegare e ricollegare i dispositivi prima ogni build).
Come sfondo, utilizziamo Jenkins su un Mac, poiché esegue anche il nostro CI per iOS.
Mentre mi avvicinavo al problema, ho pensato che se a livello di sistema operativo si trova il dispositivo, questo è almeno un inizio. In effetti, l'esecuzione di un comando come system_profiler SPUSBDataType
trova correttamente il dispositivo, incluso il numero seriale riportato da ADB quando funziona correttamente.
Ho provato alcuni comandi piuttosto scadenti per "aggiornare" tutte le attività USB, ma non sono andato da nessuna parte. Non è che puoi montare / smontare il dispositivo, ma a dire il vero non sono nemmeno sicuro di dove sia il problema, non so abbastanza sui protocolli USB di basso livello, figuriamoci per i Mac. Il mio agguato al codice sorgente ADB è stato un colpo molto, molto lungo.
Quindi a questo punto sono pronto per una soluzione che ci consenta di eseguire costantemente Android sul nostro server CI. Sia qualche comando prima di ogni lavoro Jenkins, patch ADB o qualsiasi altro trucco di magia nera.