Files
cmautobuy/docs/task/27-修复-wifi-adb-拔线后刷新丢失.md
T
2026-08-07 15:13:07 +08:00

4.2 KiB

27 修复 Wi-Fi ADB 拔线后刷新丢失

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 状态:已实现,待验收
  • 日期:2026-08-07
  • Gitea 工单:#27

背景与目标

USB 转为 Wi-Fi ADB、勾选 Wi-Fi 并保存后,拔掉 USB 数据线再搜索,设备列表会变空。SQLite 保存正常,直接原因是普通搜索只执行 adb devices -l,没有重新连接保存的 Wi-Fi 地址;旧转换流程还可能把 adbd 重启误判成已经拔线。

目标是让转换在插着 USB 时完成,并让搜索自动恢复已保存的 Wi-Fi ADB。

最终方案

  • USB 转 Wi-Fi 不再等待或判断物理拔线。
  • 插着 USB 依次读取手机 IP、开启 5555、连接 Wi-Fi,并等待 USB、Wi-Fi 两个 ADB transport 稳定。
  • 转换成功后刷新列表、勾选 Wi-Fi,并提示用户先保存再拔 USB;转换本身不写数据库。
  • 普通搜索发现已保存设备是 Wi-Fi 地址时,先执行 adb connect,再读取设备列表。
  • ADB 重启或授权握手期间短暂出现 unauthorized 时,后台最多等待约 2 秒;持续未授权则提示用户在手机上允许调试,不自动勾选。
  • 失败时保留原表格和 SQLite 配置,允许用户重试。
  • 所有 ADB 命令、等待和重试继续在 QObject + moveToThread Worker 中执行,页面关闭后忽略迟到结果。
  • 不修改数据库结构、Admin、PDD 自动化和第三方依赖。

本任务只调整已有命令行为和状态反馈,没有改变页面布局。按照 windows-ui-ux 的 Qt 长任务和表格勾选规则,保持后台执行、稳定设备号勾选及非模态状态提示,因此跳过 HTML 原型。

改了哪些

  • client/src/android_device_service.py:简化转换流程,增加 ADB transport 稳定等待和保存 Wi-Fi 重连。
  • client/src/settings_ui_event.py:普通搜索自动重连已保存 Wi-Fi,区分启动恢复、手工搜索和未授权状态。
  • client/test/test_android_device_service.py:覆盖插线转换、命令顺序、短暂未授权和连接验证。
  • client/test/test_settings_ui_event.py:覆盖手工重连、失败保留、未授权提示、双设备显示和关闭安全。

验收结果

验收标准 结果
转换不等待或误判物理拔线 通过
插线状态完成 Wi-Fi 连接并显示 USB、Wi-Fi 自动测试及真机通过
转换后提示保存,再拔掉 USB 通过
转换不会自动写入设备配置 通过
已保存 Wi-Fi 时搜索先重连再查询 自动测试及真机通过
拔掉 USB 后刷新显示并勾选 Wi-Fi 逻辑与 ADB 断连真机测试通过,待用户物理拔线验收
无已保存 Wi-Fi 时不执行额外连接 通过
重连失败保留配置并提供恢复提示 通过
短暂未授权会等待,持续未授权有明确提示 通过
主线程响应、重复点击和关闭安全 通过
不修改数据库、Admin、PDD 和依赖 通过
全量测试、语法检查、离屏冒烟和差异检查 通过

测试

  • 执行的命令:
# client 目录
C:/Python310/python.exe -m py_compile src/android_device_service.py src/settings_ui_event.py test/test_android_device_service.py test/test_settings_ui_event.py
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
  • 结果:Client 全量 95 项测试通过;语法检查、进入 Qt 事件循环的主窗口启动/退出冒烟及 git diff --check 通过。
  • 真机转换:USB 3B65BD02H7F00000 转换后稳定返回 USB 与 192.168.0.173:5555,两者状态均为 device。
  • 真机重连:主动断开 192.168.0.173:5555 的 ADB 会话后点击搜索,程序自动重连并勾选该设备,识别为 PKG110 / Android 16 / device。
  • 没验证到的部分:无法代替用户物理拔掉 USB 数据线,待可见客户端验收;尚未验证手机重启、IP 改变、切换网络、打包后的 exe、Narrator、高对比度和 200% 缩放。

测试环境仍会输出已有的 PyQt5 字体目录缺失和 SIP API 弃用警告,不影响测试结果。

相关提交

  • 5750397 fix: 修复 Wi-Fi ADB 拔线后刷新丢失 (#27)