Wir richten einen kontinuierlichen Integrationsserver für unsere Android-Entwicklung ein und stoßen schnell darauf, dass ADB auf Geräteprobleme wartet .
Für die Aufzeichnung haben wir eine Menge von Kombinationen von bereits versucht adb kill-server
, adb start-server
, adb devices
usw. ohne Erfolg.
Leider habe ich im Internet nur Variationen von "Gerät ausstecken und wieder einstecken" gefunden, was für uns offensichtlich keine Lösung ist (wir können es uns nicht ersparen, dass ein Mensch am CI-Server sitzt, um Geräte aus- und wieder einzustecken) jeder Build).
Als Hintergrund verwenden wir Jenkins auf einem Mac, da dort auch unser CI für iOS ausgeführt wird.
Als ich mich dem Problem näherte, dachte ich, wenn das Gerät auf Betriebssystemebene gefunden wird, ist das zumindest ein Anfang. Wenn Sie einen Befehl wie system_profiler SPUSBDataType
erfolgreich ausführen, wird das Gerät gefunden, einschließlich der Seriennummer, die ADB bei ordnungsgemäßer Arbeit meldet.
Ich habe ein paar ziemlich lahme Befehle versucht, um alle USB-Aktivitäten zu "aktualisieren", aber ich bin nirgendwo hingegangen. Es ist nicht so, dass Sie das Gerät ein- oder aushängen können, aber um ehrlich zu sein, bin ich mir nicht einmal sicher, wo das Problem liegt. Ich weiß nicht genug über USB-Protokolle auf niedriger Ebene, geschweige denn für Macs. Mein Lauern des ADB-Quellcodes war sehr, sehr langwierig.
An diesem Punkt bin ich gespannt auf eine Lösung, mit der wir Android auf unserem CI-Server konsistent ausführen können. Sei es ein paar Befehle vor jedem Jenkins-Job, das Patchen von ADB oder einem anderen schwarzen Zaubertrick.