Eine neue Geräteverbindung löst eine Reihe asynchroner Ereignisse aus, die nicht offensichtlich, aber dennoch verständlich sind.
Physisch verbunden
Tradefed verwendet die ddmlib
Bibliothek (eine Java- adb
-Bibliothek), um die grundlegende Interaktion mit adb
und Geräten bereitzustellen. Teil dieser Lösung ist die IDeviceChangeListener-Schnittstelle , die den Empfang neuer Geräteereignisse ermöglicht, wie zum Beispiel:
-
deviceConnected
: Wenn ein neues Gerät vonadb
erkannt wird -
deviceDisconnected
: Wenn ein Gerät sich nicht mehr anadb
meldet -
deviceChanged
: Wenn ein wichtiger Gerätestatus auftritt (z. B. Gerät offline oder Gerät online)
Diese Ereignisse reichen auf adb
Ebene aus, um zu entscheiden, ob ein Gerät verbunden, online oder offline ist. Aber für die Testumgebung benötigen wir einen stärkeren Zustand als diesen, um sicherzustellen, dass ein Gerät wirklich bereit ist, mit der Durchführung von Tests zu beginnen; Es sollte nicht durch mögliche Zustandsschwankungen beeinträchtigt werden, die bei einem neu angeschlossenen Gerät auftreten können.
Dies ist der Ablauf der Ereignisse in Tradefed:
- Das Gerät wird als
deviceConnected
erkannt und ist für regelmäßige Ereignisse vonadb
geöffnet Es wird ein internes Tradefed-Event erstellt, das Folgendes bewirkt:
- Prüfen Sie, ob das Gerät bereits bekannt ist; Tradefed behält interne Referenzen zu einigen Geräten (insbesondere zu dem Gerät, das aktuell zugewiesen ist und Tests ausführt), um zu verhindern, dass TF sie zufällig aus den Augen verliert.
- Überprüfen Sie, ob das Gerät
ONLINE
oderOFFLINE
ist.
Wenn das Gerät:
OFFLINE
: Das Gerät wird in den TradefedCONNECTED_OFFLINE
Status versetzt, wodurch das Gerät noch keine Tests ausführen kann. Wenn das Gerät später online ist, durchläuft es denONLINE
Zyklus. Wenn wir eindeviceDisconnect
-Ereignis erhalten, wird das Gerät einfach aus der Liste entfernt.ONLINE
(wie von adb gesehen): Das Gerät wird in den StatusCONNECTED_ONLINE
versetzt und seine Verfügbarkeit wird für die Testzuordnung überprüft:checking_availability
.
Bei erfolgreicher
availability
wird das Gerät als für die Testzuteilung verfügbar markiert; Es wird in der Lage sein, Tests durchzuführen. Andernfalls wird das Gerät alsunavailable
für die Zuweisung verfügbar markiert und kann keine Tests empfangen.
Alle diese Zustände werden in der Tradefed-Konsole angezeigt, wenn die Geräte über „ tf> list devices
aufgelistet werden
Es ist wichtig zu beachten, dass die meisten der oben genannten Probleme nicht auftreten, wenn das Gerät aktuell für einen Test zugewiesen ist und Tradefed den Gerätestatus intern ermittelt. Daher ist es möglich, dass ein Gerät aus adb devices
verschwindet, während es weiterhin von Tradefed gelistet wird. Dies kann beispielsweise passieren, wenn bei einem Test das Gerät neu gestartet wird.
Virtuelles Gerät mit ADB Connect verbunden
Wenn ein virtuelles Remote-Gerät erstellt wird, stellt Tradefed mithilfe von adb connect
eine Verbindung zu diesem her. Dies führt normalerweise dazu, dass das Gerät in adb devices
als <some ip>:<port number>
angezeigt wird und der gleichen Reihenfolge folgt wie physisch verbundene Geräte.
Geräteverfolgung, wenn ein deviceConnected-Ereignis auftritt
Wenn deviceConnected
auftritt, erstellt ddmlib
ein neues Referenz- IDevice , um das neu verbundene Gerät zu verfolgen.
Tradefed verwendet diese Referenz und bindet sie in seine eigene Implementierung der Geräteschnittstelle ITestDevice ein, um einen erweiterten Service bereitzustellen. Aber das zugrunde liegende IDevice ist immer dasjenige, das von ddmlib
stammt.
Das heißt, wenn ein neues Gerät angeschlossen wird, wird ein neues ITestDevice erstellt und dem IDevice zugeordnet. Wenn dies während eines Aufrufs geschieht und das ITestDevice verwendet wird, wird das zugrunde liegende IDevice trotzdem ersetzt, sodass der Test mit der richtigen Referenz fortgesetzt werden kann. Dies erfolgt nahtlos jedes Mal, wenn ein Gerät getrennt/wieder verbunden wird (z. B. während eines Neustarts).