#!/usr/bin/env bash # HPOS — ADB über WLAN verbinden, ohne USB-Kabel. # # Android 11 und neuer bringen "Wireless Debugging" mit: einmal per sechsstelligem # Code koppeln, danach verbindet sich adb über das Netz. Ein Kabel wird nie gebraucht. # # Die Ports vergibt Android bei jedem Einschalten neu — deshalb werden sie hier per # mDNS gesucht statt abgetippt. Wichtig: Kopplungs- und Verbindungsport sind zwei # verschiedene Dinge, das ist die häufigste Verwechslung. # # Aufruf: ./provision/adb-wireless.sh set -uo pipefail if [ -t 1 ]; then C_OK=$'\033[32m'; C_WARN=$'\033[33m'; C_ERR=$'\033[31m' C_HEAD=$'\033[1;36m'; C_DIM=$'\033[2m'; C_OFF=$'\033[0m' else C_OK=""; C_WARN=""; C_ERR=""; C_HEAD=""; C_DIM=""; C_OFF="" fi kopf() { printf '\n%s══ %s ══%s\n' "$C_HEAD" "$*" "$C_OFF"; } ok() { printf '%s ✓%s %s\n' "$C_OK" "$C_OFF" "$*"; } warn() { printf '%s !%s %s\n' "$C_WARN" "$C_OFF" "$*"; } fehl() { printf '%s ✗%s %s\n' "$C_ERR" "$C_OFF" "$*"; } hinweis() { printf '%s %s%s\n' "$C_DIM" "$*" "$C_OFF"; } command -v adb >/dev/null 2>&1 || { fehl "adb nicht gefunden."; exit 1; } # Ab Version 30 gibt es 'adb pair'. Ältere Fassungen können Wireless Debugging nicht. if ! adb pair 2>&1 | grep -q 'usage: adb pair'; then fehl "Dieses adb kennt 'adb pair' nicht — zu alt für Wireless Debugging." hinweis "Aktuelle platform-tools von developer.android.com/tools/releases/platform-tools" exit 1 fi adb start-server >/dev/null 2>&1 # Sucht einen mDNS-Dienst und gibt HOST:PORT zurück. Der Kopplungsdienst wird nur # angekündigt, solange der Kopplungsdialog auf dem Telefon offen ist — deshalb wird # wiederholt gesucht statt einmal. suche_dienst() { local typ="$1" versuche="${2:-20}" i zeile for ((i = 1; i <= versuche; i++)); do zeile=$(adb mdns services 2>/dev/null | awk -v t="$typ" '$2 == t {print $3; exit}') if [ -n "$zeile" ]; then printf '%s' "$zeile"; return 0; fi printf '.' >&2 sleep 1 done return 1 } # ── 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/^/ /' ok "Es ist bereits ein Gerät verbunden." hinweis "Weiter mit: ./provision/provision.sh" exit 0 fi hinweis "Kein Gerät verbunden — Kopplung wird eingerichtet." # ── Anleitung ──────────────────────────────────────────────────────────────── kopf "Auf dem Telefon" cat <<'TEXT' 1. Sicherstellen, dass Telefon und dieser Rechner im SELBEN WLAN sind. Ein Gäste-WLAN oder eine aktive Client-Isolierung verhindert die Verbindung. 2. Einstellungen → System → Entwickleroptionen → "Drahtloses Debugging" EIN 3. Dort auf "Gerät mit Kopplungscode koppeln" tippen. Es erscheint ein sechsstelliger Code und eine Adresse. Dieses Fenster BITTE OFFEN LASSEN, bis die Kopplung durch ist — der Kopplungsdienst verschwindet sonst sofort wieder. TEXT printf '\n Wenn das Fenster mit dem Code offen ist, hier Enter drücken > ' read -r _ ' read -r PAIR_ZIEL ' read -r CODE ' read -r CONNECT_ZIEL