adb-wireless: erst verbinden, dann erst koppeln

Bisher begann jeder Aufruf beim Koppeln. Wer bereits gekoppelt war, wurde deshalb
erneut nach einem Code gefragt — und weil die Kopplung ja schon bestand, führte
das zu nichts. Von außen sah es wie eine Schleife aus.

Der Fehler war eine falsche Annahme im Ablauf: die Kopplung bleibt dauerhaft
bestehen, nur die Verbindung geht verloren und der Port wechselt bei jedem
Einschalten. Ein zweiter Code wird also nie gebraucht.

Der Ablauf prüft jetzt in dieser Reihenfolge:
  1. steht schon eine Verbindung?
  2. lässt sich per mDNS verbinden? (dann bestand die Kopplung bereits)
  3. erst dann koppeln — und danach direkt wieder verbinden

Nach dem Koppeln wird zusätzlich kurz gewartet: neuere adb-Fassungen verbinden
von selbst über mDNS, dann ist der Rest überflüssig.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan
2026-08-09 18:01:29 +02:00
co-authored by Claude Opus 5
parent 410cf01973
commit b34074f48e
+70 -31
View File
@@ -38,16 +38,59 @@ suche_dienst() {
return 1
}
ist_verbunden() { adb devices | grep -qw 'device$'; }
weiter_mit_provision() {
adb devices | grep -w 'device$' | sed 's/^/ /'
kopf "Fertig"
cat <<'TEXT'
Weiter mit:
./provision/provision.sh
Gut zu wissen: ADB wird in diesem Projekt nur für die Ersteinrichtung
gebraucht. Im Dauerbetrieb kommt HPOS ohne Privilegienkanal aus.
Trennen mit: adb disconnect
TEXT
}
# Versucht zu verbinden und meldet Erfolg. Die Adresse kommt per mDNS oder,
# wenn das Netz kein Multicast durchlässt, von Hand.
verbinden_versuchen() {
local wartezeit="${1:-8}" ziel
printf ' Suche Verbindungsdienst ' >&2
if ziel=$(suche_dienst _adb-tls-connect._tcp "$wartezeit"); then
printf '\n' >&2
ok "gefunden: $ziel"
else
printf '\n' >&2
return 1
fi
adb connect "$ziel" >/dev/null 2>&1
sleep 2
ist_verbunden
}
# ── Schon verbunden? ─────────────────────────────────────────────────────────
kopf "Aktueller Stand"
VERBUNDEN=$(adb devices | grep -w 'device$' | wc -l)
if [ "$VERBUNDEN" -gt 0 ]; then
adb devices | grep -w 'device$' | sed 's/^/ /'
if ist_verbunden; then
ok "Es ist bereits ein Gerät verbunden."
hinweis "Weiter mit: ./provision/provision.sh"
weiter_mit_provision
exit 0
fi
hinweis "Kein Gerät verbunden — Kopplung wird eingerichtet."
# ── Erst verbinden, dann erst koppeln ────────────────────────────────────────
# Die Kopplung bleibt dauerhaft bestehen — nur die Verbindung geht verloren, und
# der Port ändert sich bei jedem Einschalten. Wer schon einmal gekoppelt hat,
# braucht deshalb keinen neuen Code, sondern nur ein neues connect. Ohne diesen
# Schritt landet man bei jedem Aufruf wieder im Kopplungsdialog.
hinweis "Kein Gerät verbunden. Prüfe zuerst, ob schon eine Kopplung besteht …"
if verbinden_versuchen 8; then
ok "Bereits gekoppelt — es war nur die Verbindung weg."
weiter_mit_provision
exit 0
fi
hinweis "Keine bestehende Kopplung nutzbar — richte eine neue ein."
# ── Anleitung ────────────────────────────────────────────────────────────────
kopf "Auf dem Telefon"
@@ -97,22 +140,35 @@ fi
# Hauptseite von "Drahtloses Debugging" unter "IP-Adresse und Port".
kopf "Verbinden"
hinweis "Das Kopplungsfenster kann jetzt geschlossen werden."
printf ' Suche Verbindungsdienst '
if CONNECT_ZIEL=$(suche_dienst _adb-tls-connect._tcp 20); then
printf '\n'; ok "gefunden: $CONNECT_ZIEL"
else
printf '\n'; warn "Nichts per mDNS gefunden."
hinweis "Adresse steht auf der Hauptseite von 'Drahtloses Debugging'."
# Neuere adb-Fassungen verbinden nach dem Koppeln von selbst über mDNS.
sleep 3
if ist_verbunden; then
ok "Verbindung stand bereits nach dem Koppeln"
weiter_mit_provision
exit 0
fi
if verbinden_versuchen 20; then
ok "Verbunden"
weiter_mit_provision
exit 0
fi
warn "Nichts per mDNS gefunden."
hinweis "Manche Netze blockieren Multicast. Die Adresse steht auf der Hauptseite"
hinweis "von 'Drahtloses Debugging' unter 'IP-Adresse und Port'."
hinweis "Achtung: das ist ein ANDERER Port als der aus dem Kopplungsfenster."
printf ' Adresse eintippen (IP:PORT) > '
read -r CONNECT_ZIEL </dev/tty
[ -n "$CONNECT_ZIEL" ] || { fehl "Ohne Adresse geht es nicht."; exit 1; }
fi
if adb connect "$CONNECT_ZIEL"; then
sleep 2
if adb devices | grep -qw 'device$'; then
if ist_verbunden; then
ok "Verbunden"
adb devices | grep -w 'device$' | sed 's/^/ /'
weiter_mit_provision
exit 0
else
fehl "Verbindung kam nicht zustande."
adb devices | sed 's/^/ /'
@@ -123,20 +179,3 @@ else
fehl "adb connect fehlgeschlagen."
exit 1
fi
# ── Weiter ───────────────────────────────────────────────────────────────────
kopf "Fertig"
cat <<TEXT
Jetzt läuft die Einrichtung wie mit Kabel:
./provision/provision.sh
Gut zu wissen für später:
· Die Kopplung bleibt bestehen. Nach einem Neustart des Telefons oder
nach dem Aus- und Einschalten von "Drahtloses Debugging" ändert sich
aber der Port — dann genügt dieses Skript erneut, ohne neuen Code.
· ADB wird in diesem Projekt nur für die Ersteinrichtung gebraucht.
Im Dauerbetrieb kommt HPOS ohne Privilegienkanal aus.
· Trennen mit: adb disconnect
TEXT