4.2 KiB
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 + moveToThreadWorker 中执行,页面关闭后忽略迟到结果。 - 不修改数据库结构、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 | 用户物理拔线验收通过 |
| 无已保存 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 弃用警告,不影响测试结果。
相关提交
5750397fix: 修复 Wi-Fi ADB 拔线后刷新丢失 (#27)