🔌ADB verstehen
Die Android Debug Bridge ist die Leitung zwischen Rechner und Fernseher. Sie besteht aus drei Teilen – und spricht ein erstaunlich kleines Protokoll mit nur sechs Nachrichtentypen.
Nimmt deinen Befehl entgegen, reicht ihn an den Server weiter und beendet sich wieder.
Hält die Verbindungen zu allen Geräten offen, besitzt den RSA-Schlüssel und verteilt die Befehle der Clients.
Läuft nur bei eingeschaltetem Debugging. Führt Befehle als Benutzer shell (uid 2000) aus – ohne Root-Rechte.
🔬Debugger: adb connect → AUTH → OPEN → WRTE
Der Ablauf zeigt die erste Verbindung zu einem Fernseher (mit Freigabedialog) und danach den Befehladb shell getprop ro.build.version.release. Klick dich mit „Weiter“ durch oder direkt auf einen Pfeil.
Client bittet den Server
Das Programm adb ist nur der Client. Es öffnet 127.0.0.1:5037 (startet den Server, falls keiner läuft) und schickt den Dienstnamen mit vierstelliger Hex-Länge davor.
$ adb connect 192.0.2.50:5555
001chost:connect:192.0.2.50:5555
📎 Quellen: AOSP – adb/docs/dev/protocol.md (früher protocol.txt) · AOSP – adb.h · AOSP – adb.cpp (Stand Android 9) · Android Developers – Android Debug Bridge (adb)
✉️Die Nachrichtentypen
| Kürzel | Konstante | Bedeutung |
|---|---|---|
| CNXN | 0x4e584e43 | CONNECT(version, maxdata, "system-identity-string") Beide Seiten stellen sich vor: Protokollversion, größte Nutzlast, Kennung „host::…“ bzw. „device::…“. |
| AUTH | 0x48545541 | AUTH(type, 0, "data") Anmeldung: TOKEN (1) = Zufallswert vom Gerät, SIGNATURE (2) = Signatur des Rechners, RSAPUBLICKEY (3) = öffentlicher Schlüssel. |
| OPEN | 0x4e45504f | OPEN(local-id, 0, "destination") Öffnet einen Datenstrom zu einem Dienst, z. B. „shell:…“. Die local-id darf nicht 0 sein. |
| OKAY | 0x59414b4f | READY(local-id, remote-id, "") Bestätigung: Strom steht bzw. das letzte WRITE ist angekommen – erst danach darf das nächste WRITE folgen. |
| WRTE | 0x45545257 | WRITE(local-id, remote-id, "data") Nutzdaten für den Strom der Gegenseite; höchstens maxdata Byte. |
| CLSE | 0x45534c43 | CLOSE(local-id, remote-id, "") Strom beendet. Auf ein CLOSE wird nicht geantwortet. |
| SYNC | 0x434e5953 | SYNC(online, sequence, "") Nur intern im adb-Server; darf nie über die Leitung gehen. |
Die Konstante ist nichts Geheimnisvolles: die vier ASCII-Buchstaben, als 32-Bit-Zahl in Little Endian gelesen. „CNXN“ = 43 4e 58 4e → 0x4e584e43. Das letzte Kopffeld magic ist dieselbe Zahl mit umgedrehten Bits. Neuere Fassungen des Protokolls kennen zusätzlich STLS (0x534c5453): Damit kündigt eine Seite an, dass die Verbindung per TLS verschlüsselt wird – so arbeitet das Debugging über WLAN mit Kopplungscode.
📎 Quelle: AOSP – adb/docs/dev/protocol.md (früher protocol.txt)
🧪Die wichtigsten adb-Befehle
adb connect 192.0.2.50:5555 # Standardport 5555 darf entfallen adb devices -l # device | unauthorized | offline adb -s 192.0.2.50:5555 shell # interaktive Shell auf dem Fernseher adb -s 192.0.2.50:5555 shell id # uid=2000(shell) … adb disconnect 192.0.2.50:5555 adb kill-server # Server beenden (startet beim nächsten Befehl neu)
| Zustand | Bedeutung | Abhilfe |
|---|---|---|
| device | verbunden und freigegeben | – |
| unauthorized | Schlüssel am Fernseher nicht bestätigt | Dialog am Gerät bestätigen |
| offline | Verbindung bekannt, Gerät antwortet nicht | Gerät wecken, adb disconnect, neu verbinden |
| Connection refused | Port 5555 ist zu | Debugging einschalten; Adresse prüfen |
adb -s "$TV_HOST" auf.