Tworzymy serwer ciągłej integracji dla naszego rozwoju Androida i szybko natknęliśmy się na ADB czekające na problem z urządzeniem .
Dla przypomnienia, już próbowałem wiele kombinacji adb kill-server
, adb start-server
, adb devices
itp bezskutecznie.
Niestety, wszystko, co znalazłem w Internecie, to odmiany „odłącz i ponownie podłącz urządzenie”, co oczywiście nie jest dla nas rozwiązaniem (nie możemy oszczędzić człowiekowi usiąść przy serwerze CI, aby odłączyć i ponownie podłączyć urządzenia przed każda kompilacja).
Jako trochę tła używamy Jenkinsa na komputerze Mac, ponieważ obsługuje on również nasz CI dla iOS.
Zbliżając się do problemu, pomyślałem, że jeśli na poziomie systemu operacyjnego urządzenie zostanie znalezione, to przynajmniej początek. Rzeczywiście, uruchomienie polecenia takiego jak system_profiler SPUSBDataType
pomyślne wyszukuje urządzenie, w tym numer seryjny zgłoszony przez ADB przy prawidłowej pracy.
Próbowałem kilka raczej kiepskich poleceń, aby „odświeżyć” całą aktywność USB, ale nigdzie nie poszedłem. Nie chodzi o to, że możesz zamontować / odmontować urządzenie, ale szczerze mówiąc, nie jestem nawet pewien, gdzie jest problem, nie wiem wystarczająco dużo o protokołach USB niskiego poziomu, nie mówiąc już o komputerach Mac. Moje przeczucie kodu źródłowego ADB było bardzo, bardzo dalekie.
Więc w tym momencie jestem gotów na rozwiązanie, które pozwoliłoby nam konsekwentnie uruchamiać Androida na naszym serwerze CI. Czy to kilka poleceń przed każdym zadaniem Jenkinsa, załatanie ADB lub innej sztuczki czarnej magii.