From eda71c8e5fcb9c719af267650c48bbe62114d69c Mon Sep 17 00:00:00 2001 From: butubb <1422726308@qq.com> Date: Wed, 19 Aug 2026 08:08:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20USB=20=E8=AE=BE=E5=A4=87=E5=8F=8C?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E2=80=94=E2=80=94=E4=BC=98=E5=85=88=E6=9C=AC?= =?UTF-8?q?=E6=9C=BA=20adb=20=E7=9B=B4=E8=BF=9E=EF=BC=8C=E5=85=B6=E6=AC=A1?= =?UTF-8?q?=20220=20=E8=BF=9C=E7=A8=8B=20adb=20server=EF=BC=88=E5=8E=9F?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8F=AA=E6=9F=A5=E8=BF=9C=E7=A8=8B=EF=BC=8C?= =?UTF-8?q?=E6=9C=AC=E6=9C=BA=20USB=20=E4=BC=9A=E8=A2=AB=E8=AF=AF=E5=88=A4?= =?UTF-8?q?=E4=B8=8D=E5=9C=A8=20server=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/device_worker.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/core/device_worker.py b/core/device_worker.py index 0c2a060..a613e2a 100644 --- a/core/device_worker.py +++ b/core/device_worker.py @@ -19,7 +19,7 @@ import uiautomator2 as u2 from config import USB_ADB_HOST, USB_ADB_PORT from core.logger import get_logger from core import device_pool -from .adb_helper import adb_connect, _adb_remote +from .adb_helper import _adb, adb_connect, _adb_remote _log = get_logger("core.worker") @@ -62,22 +62,30 @@ class STFDevice: _log.info(f"[{self.serial}] 选定设备") # 直连优先:serial 本身是 IP:5555(如 Tailscale 网络设备)时直接 adb connect。 - # 只 connect、绝不 disconnect/kill-server(红线),不影响 STF provider 的连接。 + # 只 connect、绝不 disconnect/kill-server(红线),不影响共享 adb transport。 if ":" in self.serial: self.remote_adb_url = self.serial _log.info(f"[{self.serial}] 直连设备: {self.remote_adb_url}") if not adb_connect(self.remote_adb_url): raise STFError(f"adb connect 失败: {self.remote_adb_url}", "offline") else: - # USB 设备:插在 220 上,本机 adb 看不到,经远程 adb server 驱动。 - # 无需 adb connect——设备已在远程 server 上,直接校验可见性。 - self.usb_server = f"{USB_ADB_HOST}:{USB_ADB_PORT}" - _log.info(f"[{self.serial}] USB 设备,远程 adb server: {self.usb_server}") - out = _adb_remote(USB_ADB_HOST, USB_ADB_PORT, "devices") or "" - seen = {line.split()[0] for line in out.splitlines()[1:] - if len(line.split()) >= 2} - if self.serial not in seen: - raise STFError(f"USB 设备 {self.serial} 不在远程 adb server", "offline") + # USB 设备(serial 无冒号):优先本机 adb(插在平台本机), + # 其次 220 远程 adb server(插在 220 上,经 Tailscale 驱动)。 + # 两者都不需要 adb connect——设备已连接在对应 server 上,只做可见性校验。 + local = {line.split()[0] for line in (_adb("devices") or "").splitlines()[1:] + if len(line.split()) >= 2} + if self.serial in local: + self.remote_adb_url = self.serial # u2 走本地 adb(无需 connect) + _log.info(f"[{self.serial}] USB 设备,本机 adb 直连") + else: + self.usb_server = f"{USB_ADB_HOST}:{USB_ADB_PORT}" + _log.info(f"[{self.serial}] USB 设备,远程 adb server: {self.usb_server}") + out = _adb_remote(USB_ADB_HOST, USB_ADB_PORT, "devices") or "" + seen = {line.split()[0] for line in out.splitlines()[1:] + if len(line.split()) >= 2} + if self.serial not in seen: + raise STFError( + f"USB 设备 {self.serial} 不在本机 adb 也不在远程 adb server", "offline") time.sleep(2) def _pick_free(self):