同步移动端工程、设备控制改进与发布资料
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# 开发部署断点检查
|
||||
|
||||
额度中断后先读板端状态,没有重复部署。核验结果:
|
||||
|
||||
- `/opt/matrix-screen-controller` 是指向既有版本目录的符号链接。
|
||||
- 第二次部署暂存目录 `/tmp/qms-mobile-stage-f50b2e0519bc` 留有有效 `status.json`;主服务与 bluetooth、aw859-bluetooth 三个服务均 active/running。
|
||||
- `/opt/matrix-screen-controller.mobile-backup-f50b2e0519bc` 是独立目录,含原程序和虚拟环境;须保留到本轮部署验收与回退演练结束。
|
||||
- 第一次失败的 `/opt/matrix-screen-controller.mobile-backup-dd700979ce9f` 只是符号链接,**不可作为回退备份**。第一次失败时已恢复被移动的原虚拟环境并重新启动原服务。
|
||||
- 当前 `app/main.py`、`app/mobile/bluez.py` SHA-256 与本地一致,功能时间为 `2026-09-24T16:43+08:00`,没有推进发布版本。
|
||||
- 存在 1 个 hci 适配器,HTTP 状态报告蓝牙可用、手机未连接;无遗留实际部署 shell。进程检查必须检查 argv,不能把探测命令自身的文本计入部署进程。
|
||||
- 未改原生驱动实现,未启动摄像头、实屏视觉检查或测试图案。视觉检查不适用。
|
||||
|
||||
以上证明开发部署已生效,**不证明真实 BLE 握手、Android 页面、断线恢复及 WiFi 切换通过**。下一步先运行只读真机 BLE 仪器测试,验证加密、状态、设置、内容列表、当前帧、密码不回传以及断开后重连。
|
||||
|
||||
本机已有 Python 协议/会话/控制/WiFi/专用主机检查组合 36 项通过,旧 API 28 项通过;Kotlin/JVM 5 项通过,开发 debug APK 编译通过。未完成项仍以总实施状态和需求验收映射为准。
|
||||
@@ -0,0 +1,32 @@
|
||||
# 文档与测试登记阶段证据
|
||||
|
||||
## 已完成
|
||||
|
||||
- 建立移动需求、协议 1.0 设计、详细设计、测试矩阵、构建说明和跨端维护入口。
|
||||
- 根协作指南、设备需求、设备开发说明及双方测试流程同步视觉检查门禁。普通 UI/BLE 入口不强制实屏,确需时先询问用户如何启动。
|
||||
- 私有测试机代号 `android-test-a` 经 USB 授权检查并登记;真实设备标识未写入本报告,空白示例保持空白,真实文件由精确 Git 忽略规则排除。
|
||||
- Windows ADB 无 usb 标记时,用 USB-only 查询确认传输;无法判定时拒绝,不从序列号形式猜测。
|
||||
- 仓库卫生检查加入手机私有标识、真实登记和签名密钥检查。
|
||||
|
||||
## 验证
|
||||
|
||||
| 检查 | 结果 |
|
||||
|---|---|
|
||||
| 登记脚本 unittest | 8 项通过;空白/损坏/已存在/多机/未授权/USB 判断/系统变化/隐私门禁 |
|
||||
| test_repository_hygiene.py | 8 项通过,包含原设备凭据回归及新增手机标识检查 |
|
||||
| 主测试机登记和在线检查 | 通过,只输出测试代号 |
|
||||
| Git 私有登记忽略 | 通过 |
|
||||
| 完整仓库卫生检查(包含二进制扫描) | 通过,504 个候选文件 |
|
||||
| Markdown 相对链接检查 | 11 个文档,无失效链接(检查时数量) |
|
||||
| git diff --check | 通过;Git 提示的现有行尾规范转换不属于空白错误 |
|
||||
| 实屏/摄像头 | 不适用;未启动视觉程序或切换视觉测试图案 |
|
||||
|
||||
## 尚未完成
|
||||
|
||||
Android Studio 用户安装、KMP 源码、协议黄金向量、BLE/公共业务实现、板端部署、debug APK 和真实联调尚未完成。本文不能作为设备功能或 App 交付通过证据。未修改设备功能时间及发布版本,未导出 IMG/OTA。
|
||||
|
||||
## 继续位置
|
||||
|
||||
官方安装包 `android-studio-quail4-patch1-windows.exe` 已保存至 `<用户普通下载目录>/AndroidStudio/`,共 1484419056 字节。来源为 Android 官方下载页面提供的 Google 分发链接(2026.1.4.8)。SHA-256 与官网一致:`07fb2a6d54d14b137e2a5db274ba0e70be9291eb4245707f53164bb30cd69e95`;Windows Authenticode 为 Valid,签名者 Google LLC。未启动安装器,未替用户安装 Android Studio。
|
||||
|
||||
安装包下载核验完成后按用户指令停下等待正常安装。安装完成从环境确认与工程创建继续,不重复覆盖测试机登记,不启动正式签名或视觉检查。
|
||||
@@ -0,0 +1,32 @@
|
||||
# 断线与重连排查(进行中)
|
||||
|
||||
用户反馈:App 连接后可能自行断开,返回重连不成功。测试手机使用代号 android-test-a;不记录真实蓝牙地址、序列号和网络凭据。
|
||||
|
||||
## 已实施
|
||||
|
||||
- RPC/握手内部超时转换为通信失败,关闭旧 GATT,避免被 CancellationException 分支吞掉而残留连接界面。
|
||||
- GATT 建立超时也转换为通信失败;仅在握手前针对同一设备最多两次尝试,用户取消不重试,业务写请求不重放。
|
||||
- 该手机曾对一次 MTU 请求报告 517 和 247;App 接收上限保守限制为 247,服务发现只启动一次,防止重复发现/订阅。
|
||||
- 设备端应用声明 MTU 与 BlueZ 上限取较小值的修复已在此前开发部署,本轮未改动显示驱动。
|
||||
- 真机测试增加持续轮询、生产 Controller 三页读取及前后台释放/重连。运行器允许 `--poll-cycles 0` 单独定位连接/Controller 问题,但此模式不算持续轮询验收;默认仍为 60。运行器主机超时时停止本 App 的 instrumentation,防止遗留连接。
|
||||
|
||||
## 实际结果
|
||||
|
||||
| 项目 | 结果 |
|
||||
|---|---|
|
||||
| 核桃派主服务、bluetooth、aw859-bluetooth | 三者 active;未发现上次部署中途停服 |
|
||||
| Android debug 与 instrumentation APK 构建 | 通过;源码在原中文路径,构建使用隔离 ASCII 路径 |
|
||||
| JVM 测试 | 6 项通过:跨语言加密 3、协议 2、RPC 超时清理 1 |
|
||||
| 60 轮真实状态/当前帧读取及重新握手 | 一次通过,耗时 195.316 秒 |
|
||||
| 最新重复 MTU 回调修复后的底层读取 | 增强测试完成底层部分,随后 Controller 等待首屏数据失败;整体不能判通过 |
|
||||
| 生产 Controller 三页及前后台 | 等待首屏容量数据 30 秒超时,未完成后续步骤;已补充 phase/error 诊断 |
|
||||
| 随后针对性复测 | 扫描成功,GATT 建立失败;尚未进入 Controller 检查 |
|
||||
| 间歇性 GATT 建立失败 | Android 曾报告状态码 62;同环境后续可连接并完成持续测试,原因未确认 |
|
||||
| 仓库卫生检查 | 已通过 550 个候选文件;后续新文档仍需最终复查 |
|
||||
| 视觉检查 | 不适用;未启动相机或切换实屏测试图案 |
|
||||
|
||||
以上不等同首版交付通过,也不将一次稳定通信视为偶发问题已经完全解决。当前修复 APK 已覆盖安装在主测试机,只有 debug 签名。
|
||||
|
||||
## 下一步
|
||||
|
||||
先确认测试期间没有人工操作干扰及设备距离,继续定位 GATT 建立失败;随后重新完成生产 Controller 状态机测试、蓝牙关闭/恢复、服务重启及异常断线恢复。按用户要求,新 root 用途必须先停止对话说明并等待开始授权;此前授权仅覆盖本 App 的蓝牙权限授予,不自动扩大用途。
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,43 @@
|
||||
# 2026-09-25 本轮交付核对
|
||||
|
||||
## 产物与运行状态
|
||||
|
||||
- Android 0.1.0,versionCode 2,仅 debug 签名;APK 位于 `../构建与发布/交付包/0.1.0-2/奇妙小屏幕-0.1.0-debug.apk`。
|
||||
- APK SHA-256:`f7c1dc215aa5934359a37fd001e1bc3cbf959b4a386662b1a886efb1ab73ea46`。
|
||||
- 调试证书 SHA-256:`b413e68c0bd2311c491ebd087ac5791c7c2ad8267793f92f6055d5521bd3ef4d`,沿用旧包证书,可覆盖安装。
|
||||
- Android 主测试机已覆盖安装 code 2。最后实际 Activity 测试主动断开,板端 connected=false、BLE available=true,无驱动错误。
|
||||
- 设备 VERSION 1.1.1 不变,FEATURE_UPDATED_AT 为 2026-09-25T21:46+08:00;本轮部署清单全部源文件摘要与本地一致。不生成 IMG/OTA。
|
||||
|
||||
## 本轮已通过
|
||||
|
||||
| 验证 | 结果及边界 |
|
||||
|---|---|
|
||||
| Python 全套 | 461 通过,9 跳过;复用现有 FFmpeg 后另补测 6 通过、1 libheif 跳过。剩余环境项为 libheif 编码工具、Windows 目录符号链接、专用旧 worker 隔离探针。 |
|
||||
| JVM | 9 项通过:加密/分片/超时和 Controller 状态恢复;模拟链路不随生产 APK 发布。 |
|
||||
| 隔离构建 | 全新且带空格的 ASCII 目录执行 92 个任务,JVM/debug APK/测试 APK 全部成功;中文源码原位保留。 |
|
||||
| Android lint | 已通过,0 错误;保留依赖升级等警告,不为消警告擅自升级锁定工具链。 |
|
||||
| 完整 BLE | 277.369 秒通过,60 轮读取、重新扫描后第二次握手、Controller 三页、缩略图、后台释放与返回重连。此前状态 62 失败保留在历史报告。 |
|
||||
| 真实控制写入 | 118.701 秒通过:当前亮度重提交、活动动画暂停/当前位置 seek/原倍速提交、恢复原暂停状态,默认内容保持不变。 |
|
||||
| code 2 实际 Activity | 60.105 秒通过:蓝牙关闭/恢复、三页、后台 Home 33 秒、返回重连、主动断开。已授权 root 输入按语义节点位置操作,未截图。 |
|
||||
| 网络 | 扫描、冲突后会话可用、保留密码重新应用当前静态网络通过;DNS 逗号/换行解析修复已部署。 |
|
||||
| 双手机 | 用户确认普通扫描不可抢占、主机退出后第二台接入操作成功、第二台退出后广播恢复。未指定操作不扩充为全功能验证。 |
|
||||
| 部署恢复 | 故意安装后退出 97,真实回滚恢复程序与配置摘要,服务 active;随后真实 stop/start 五项全部通过。 |
|
||||
| 后续升级逻辑 | 蓝牙纳入持久组件事务,35 项相关单测通过;不等同真实完整 OTA 验收。 |
|
||||
| 性能 | 原动画+预览/WiFi 扫描窗口约 97.4 Hz,截止丢失增加 1,OE 故障 0;详见性能 JSON,无蓝牙关闭前后因果对照。 |
|
||||
| 仓库卫生 | 567 个候选文件检查通过;真实凭据、调试密钥不在产物中。 |
|
||||
|
||||
## 尚未验证或尚待完善
|
||||
|
||||
- Android 8–12 等其他系统版本、定位开关、拒绝/永久拒绝权限的完整 UI 矩阵未跑完;不能由 Android 13 已授权真机推定通过。
|
||||
- 不同 SSID、错误密码、DHCP 与静态互换、下次开机生效尚未逐项真机覆盖。当前网络重新应用成功只证明该实际场景。
|
||||
- 新内容选择/保存开机默认有共享业务及网页状态一致性的本机测试,当前轮真实写入只覆盖不更换内容的操作。
|
||||
- 状态详情目前可展开 JSON,尚未完全转换成中文分组卡片;独立 Compose UI 模拟测试矩阵未完成。
|
||||
- 完整真实 OTA 与掉电恢复未在本轮执行;普通部署失败回滚、真实 systemd 停启已单独通过。
|
||||
|
||||
因此本包保留“开发验证”标记,不声称所有首版验收已完成。视觉检查不适用:没有改驱动或底层输出,没有启动摄像头,也没有切换实屏测试图案。
|
||||
|
||||
## 恢复与清理
|
||||
|
||||
最新部署前完整程序备份:`/opt/matrix-screen-controller.mobile-backup-71e6e1b8dcfe`。备份附带原主服务 unit、蓝牙配置和项目 drop-in,按 `deploy_mobile_dev.py` 的 rollback 路径恢复;程序目标可能为 symlink,不能用只备份链接代替实际目录内容。恢复不覆盖 `/var/lib/matrix-screen-controller`,恢复后检查主服务、BLE 与配置摘要。不要把故障测试中的旧备份误当最新程序。
|
||||
|
||||
本轮四个已核验的远端 staging 目录已清理,恢复副本保留;临时手机输入脚本由测试 finally 删除。旧 code 1 包保留用于双手机测试追溯,不自动替换第二台手机上的版本。
|
||||
@@ -0,0 +1,63 @@
|
||||
# 重启后连接恢复与联调记录
|
||||
|
||||
用户确认全部机器已重启,并明确授权 root 切换专用测试手机蓝牙。重新执行手机登记/USB 授权和核桃派凭据门禁,未沿用前一日进程、连接或运行目录判断。
|
||||
|
||||
## 初始状态与授权操作
|
||||
|
||||
- android-test-a USB 调试与登记身份核验通过。
|
||||
- 核桃派主服务、bluetooth.service、aw859-bluetooth.service 均 active;mobile.available=true,初始无控制会话、收发计数为 0。
|
||||
- root 返回 UID 0;关闭手机蓝牙后验证 bluetooth_on=0,恢复后验证为 1。仅操作授权蓝牙用途,未扩展系统修改。
|
||||
|
||||
## 故障证据与修复
|
||||
|
||||
重启后首次测试失败。手机日志显示连接已建立,先回调缓存 MTU 517,随后才完成 MTU 247 协商;App 在缓存回调中提前调用 discoverServices,没有获得 onServicesDiscovered,之后连接被释放。
|
||||
|
||||
Android 修复:等待实际不大于 247 的 MTU 回调后启动一次服务发现;未出现该回调则 2 秒后备启动;关闭取消后备任务。保留此前超时清理及仅握手前有限重试。设备代码、协议格式与显示驱动未改,未重新部署设备。
|
||||
|
||||
修复后日志显示 MTU 247 回调后服务发现成功、通知订阅完成。`BleIntegrationTest --poll-cycles 0` 通过,115.718 秒:两次真实加密会话、状态/容量/设置/内容/帧/网络只读接口、生产 Controller 三页与缩略图队列、短后台返回取消释放、后台 30 秒释放以及前台重连。此模式不替代 60 轮持续读取;完整复测另外记录。
|
||||
|
||||
## 后续联调记录(按事件保留)
|
||||
|
||||
DNS 修复开发部署成功,主服务与 mobile.available 均正常;回退副本保留在 `/opt/matrix-screen-controller.mobile-backup-82b8d262a76b`,本轮不导出 IMG/OTA、不推进设备 VERSION。修复后使用独立重建 APK 执行真实 BLE 原网络重新应用,123.272 秒整体通过:保存的静态 IPv4 字段不变、密码保留、网络任务成功、重新连接当前网络、BLE 后续请求与 Controller 生命周期正常。
|
||||
|
||||
真实网络激活首轮在保存前返回 BAD_REQUEST。只读诊断确认:当前为静态 IPv4,nmcli 把多个 DNS 返回为逗号分隔单行,原解析按换行,validate_wifi_settings 拒绝该混合字符串。修复设备端 read_saved 兼容逗号/换行并去重,新增三种格式的密码保留往返测试;网络/移动控制/API 共 46 项回归通过。更新设备功能时间为 2026-09-25T16:10+08:00,版本号不变;部署和重新应用网络的结果另行记录。
|
||||
|
||||
独立重建:从中文源码目录通过文档脚本复制到新建、包含空格的 ASCII 构建根目录,所有 92 个构建任务执行,JVM 测试、debug APK、instrumentation APK 均成功。此验证不依赖旧构建目录,也不要求不同构建路径产出字节相同 APK。
|
||||
|
||||
BLE WiFi 扫描、拒绝故意过期的配置修订后继续 ping、10 轮状态/帧读取及 Controller 生命周期组合测试通过(159.495 秒)。本机 mobile protocol/session/control 与 dedicated_host 共 33 项 pytest 通过;依赖产生弃用提示,未记为测试失败。
|
||||
|
||||
并行运行 150 秒性能采样,保存 122 个有效样本,详见 `2026-09-25_BLE_WiFi性能样本.json`。期间原有动画持续运行,未切换内容;完成帧增加 14578,截止丢失增加 1,OE 故障增加 0,未发现驱动错误。未连接 20 样本:平均刷新 97.379 Hz、应用 CPU 平均 26.74%;连接 102 样本:平均刷新 97.416 Hz、CPU 平均 27.07%;两组应用内存最大均 233.10 MiB。此为同一运行窗口的观察值,包含 WiFi 扫描和帧读取,不能替代蓝牙关闭前后的受控对照;不宣称零丢失。
|
||||
|
||||
第二台手机后续结果:用户明确报告连接成功,执行了一些操作且未发现问题,随后退出第二台 App。操作清单没有逐项登记,因此只记录“第二台接入和用户手动操作通过”,不推定 WiFi 切换/所有写操作已覆盖。退出后板端复核 connected=false、ActiveInstances=1,释放与恢复广播通过。主机占用时不可扫描、异常退出后第二台接入、第二台退出后广播恢复的普通双手机流程已完成。
|
||||
|
||||
双手机分阶段验收:用户在第二台手机扫描,报告看不到设备;同步板端确认主测试机控制会话仍 connected=true,BlueZ ActiveInstances=0,符合占用时暂停广播。随后通过正常 ADB force-stop 主测试 App 验证异常退出释放;板端确认 connected=false、ActiveInstances=1,广播恢复。当时请求第二台重新扫描并连接;后续用户已确认成功,见本节第二台结果。本项仅证明普通扫描入口未提供抢占机会,不把它夸大为恶意客户端无法尝试连接的证明。
|
||||
|
||||
真实 systemd 主服务 stop/start 测试通过:RuntimeDirectory 的测试 sentinel 在停服及重新启动后均保留;config.json、wifi_config.json、mobile/identity.json 摘要不变;服务启动后 mobile.available=true 且无残留手机会话。测试 sentinel 已清理。随后正常启动主测试 App 并确认重新连接成功。该项不等同完整故障回滚或 OTA 测试。
|
||||
|
||||
用户随后明确授权 root 自动点击本 App。直接从 instrumentation 执行带引号的命令未达到预期点击效果,改用只在授权模式推送的 shell 辅助脚本:核对本 App 为前台、限制 tap 的数字参数/Home、验证成功标记,结束删除脚本。真实 `AppLifecycleTest --root-input` 通过,49.45 秒:自动连接、内容/设置/设备页切换、Home 后等待 33 秒、返回自动重连和主动断开。未操作其他 App、系统安全开关或摄像头。
|
||||
|
||||
实际 Activity 测试结果:第一次被 MIUI 的后台启动限制拒绝;测试改为正常 shell 显式启动 App 后,App 前台与自动连接检查通过,但点击“内容”时被系统拒绝,错误为 INJECT_EVENTS 权限不足。不能记为三页 UI 自动化通过。已准备可选 `--test activity --root-input`,只根据本 App 语义控件的当前中心位置点击,并允许 Home 键验证后台;不改系统权限/安全开关、不操作其他 App。当时属于新 root 用途,因而暂停;用户随后明确授权并通过测试,结果见上段。测试 APK 编译通过。
|
||||
|
||||
完整 `BleIntegrationTest` 随后通过,290.908 秒,包含默认 60 轮持续读取及全部 Controller 前后台流程。`lintDebug` 通过,0 错误、14 警告;警告主要为依赖可升级提示、版本目录建议、KTX 建议、低版本忽略高版本权限属性,以及应用图标/备份规则配置建议。未为消除升级提示改动已锁定工具链。APK 使用现有 Android Debug 证书,签名验证通过。
|
||||
|
||||
上述已完成项目均分别记录;其余未覆盖场景见实施状态,当前不宣称全部首版验收完成。视觉检查不适用,未启动相机或切换实屏图案。
|
||||
|
||||
## 断线状态清理版本的复测
|
||||
|
||||
新增 ControllerRecoveryTest 三项测试通过:传输失败后清空旧画面与状态并可重连、主动断开取消在途操作、旧扫描回调不能污染新扫描。真实 Activity 蓝牙切换/三页/后台释放/返回重连通过,65.637 秒。
|
||||
|
||||
该版之后的 BLE 持续回归完成 60 轮读取;测试主动关闭第一会话后,第二次 GATT 建立两次返回状态 62,整项失败,191.663 秒。手机日志显示第一会话由测试正常 close,不能将这次失败描述为持续读取期间的莫名掉线。板端复核 available=true、connected=false,广播实例为 1。测试修改为第二次连接前重新扫描,与正式 App 路径一致;仅凭此修改不能证明地址复用就是根因,复测结果须另行登记。
|
||||
|
||||
## 本机完整回归
|
||||
|
||||
全套 pytest 首次为 456 通过、1 失败、9 跳过。唯一失败是 index.html 添加手机连接状态后 ui-copy.json 未重新生成;运行正式生成器更新 424 条文案索引后,test_ui_copy_editor.py 的 10 项全部通过。新增生成索引也加入开发部署清单。跳过项不能计作通过,不用本机 mock 结果替代板端硬件测试。
|
||||
|
||||
仓库卫生检查通过,562 个 Git 候选文件,未输出真实凭据。未启动正式签名、IMG 或 OTA 导出。
|
||||
|
||||
重新扫描连接版本完整 BLE 真机复测通过,277.369 秒:60 轮状态/帧读取、第二次扫描与加密握手、生产 Controller 三页数据、缩略图、后台释放及返回重连。该 APK 同时包含预览确认时间/过期提示与开机默认内容回读。之前 GATT 状态 62 的失败仍保留,不以单次成功宣称全部无线环境绝无断线。
|
||||
|
||||
真实开发部署故障恢复通过:安装文件与 unit 后故意退出 97,同一 EXIT 回滚路径恢复程序;被部署文件及 config.json、wifi_config.json、mobile/identity.json 摘要与测试前一致,服务 active。随后真实 stop/start 五项全部通过,BLE available 且无残留会话。故障测试副本保留于 `/opt/matrix-screen-controller.mobile-backup-e224b2adf70b`;这不是正式 OTA 或掉电测试。
|
||||
|
||||
控制写入专项真实 BLE 回归通过,118.701 秒:使用当前修订重新提交原亮度并回读一致;活动动画暂停、当前位置 seek、原倍速写入成功,finally 恢复原暂停状态,开机默认内容保持一致。测试未选择新内容。首轮曾因厂商在覆盖安装后异步撤回蓝牙权限而未进入 BLE 测试;已授权 root 授予后的延时复核修正后通过。
|
||||
|
||||
后续升级兼容:蓝牙文件/服务状态纳入 ota_components 的持久系统事务,无 FRP 载荷的移动端补丁也会运行安装入口;旧事务日志不触碰蓝牙。新增测试包括无 FRP 载荷进入事务、失败恢复文件/屏蔽状态、旧日志兼容,组件与生命周期单测 35 项通过。此处尚不代表完整真实 OTA 升级验收。
|
||||
@@ -0,0 +1,25 @@
|
||||
# 2026-09-26 Android WiFi 切换专项
|
||||
|
||||
结论:`ANDROID-TEST-WIFI` 在已登记的专用 Android 手机上通过。第二网络为本机移动热点;核桃派原网络最终恢复。只验收本编号,其他 Android 版本和测试编号未执行。真实设备标识、SSID、IP 和密码不进入本归档。
|
||||
|
||||
## 测试版本与方式
|
||||
|
||||
- Android App:debug 构建,`versionCode 2`、`versionName 0.1.0`;UI 源码 SHA-256 `4C9F1E67ACA84ED025110CD36DAF2A20EE1DA7FBFF7F525A2EED0D4203FB2819`,控制器源码 SHA-256 `1B23010730AEE35F2512BB247A79040360A046A055B7029E269A17F9790686E7`。
|
||||
- 核桃派已部署版本 `1.1.1`,功能时间 `2026-09-25T21:46+08:00`;BLE 协议主/次版本 `1.0`。
|
||||
- 先通过私有凭据门禁、手机登记和 ADB 授权检查。电脑热点参数只在测试进程内读取;原 NetworkManager 文件以受保护权限备份,并为每次切网设置超时恢复。App 的语义控件操作使用本次获授权的 root 输入辅助,范围限于本 App 设置页。
|
||||
|
||||
| 场景 | 实机结果 |
|
||||
|---|---|
|
||||
| 设备扫描与手填 | App 设置页设备扫描无错误;另行核对扫描列表含电脑热点。手动输入 SSID 提交成功。手填能力通过;真正隐藏的接入点未验证。 |
|
||||
| 字段校验 | 空 SSID 时保存按钮禁用;通过 App 提交无效静态 IPv4 时收到参数错误,板端原网络未切换。 |
|
||||
| 密码显示与清除 | App 的“显示本次输入的密码”只在提交前显示临时输入;提交后密码文本消失。App 的 BLE WiFi 详情无 `password` 字段。 |
|
||||
| 错误密码 | App 曾显示“网络连接失败”;独立复测时 App 经 BLE 读到任务 `failed`,即使板端 WiFi 暂时失联,BLE 仍可查询。短时恢复计时器执行后,原配置文件摘要、保存与活动网络、服务状态通过核对,保护材料已清理。 |
|
||||
| 电脑热点 DHCP | 通过 App 立即切换;已核验热点网段内的板端连接、SSH 主机密钥、服务状态、BLE 保存配置和活动连接,IPv4 模式为 DHCP。 |
|
||||
| 静态 IPv4 | 通过 App 提交热点静态地址;BLE 保存配置为静态,板端实际连接地址与提交值一致。 |
|
||||
| 返回 DHCP | 通过 App 再提交 DHCP;BLE 保存配置和板端活动连接均回到热点 DHCP。 |
|
||||
| 下次开机生效 | 通过 App 保存原网络及原 IPv4 配置,保存后活动连接仍为热点;受控软件重启后,App、BLE 与板端均确认连接原网络。 |
|
||||
| 最终恢复与保密 | 原 NetworkManager 文件和受保护副本 SHA-256 相同;保存和活动网络均为测试前网络,服务运行。热点、原网络和错误密码未出现在所查板端服务日志中。临时恢复目录、计时器及手机短时私有测试文件已清理;最终 App、BLE、板端复核通过。 |
|
||||
|
||||
测试过程中曾有两类测试器误判:一次在软件重启后提前要求 NetworkManager 文件字节自行恢复,一次只按固定时间寻找 App 错误提示。已分别改为先验证实际连接、再恢复原文件,以及单独用 BLE 任务终态核验错误密码。每次中断后均核验原网络恢复;最终独立复测通过。
|
||||
|
||||
本轮没有真实隐藏热点,隐藏 SSID 的无线连接分支标为未验证;已验证手填 SSID。未修改显示驱动或输出实现,视觉检查不适用;未开启摄像头或切换实屏测试图案。
|
||||
@@ -0,0 +1,39 @@
|
||||
# 安卓四栏界面与连接体验优化
|
||||
|
||||
App:0.2.0,versionCode 3,debug 签名。设备协议主版本保持 1,设备发布版本仍为 1.1.1;功能时间为 2026-09-26T14:30+08:00。未导出 OTA 或 IMG。
|
||||
|
||||
## 实现范围
|
||||
|
||||
四栏导航、设备与 WiFi 顶部摘要、保存设备及长按管理、已连接时独立扫描、GATT RSSI、精简共享预览、设备持久内容排序、中文设置、折叠 WiFi 表单、DHCP/静态字段、立即生效确认、密码保留/替换、关于与手机昵称设置已实现。设备端增加保守的脱敏 WiFi 失败分类,密码不回读。需求、详细设计、兼容记录及 root 测试规则已同步。
|
||||
|
||||
## 已完成验证
|
||||
|
||||
- 仓库外独立复制构建:JVM 13 项通过;主 APK、测试 APK、Android lint 通过(无错误,16 项工具链、资源与代码建议警告)。源码摘要匹配,debug 签名校验通过。
|
||||
- 设备相关业务与协议回归:46 项通过;隔离复制后同组 46 项通过。手机登记门禁单测 8 项通过。仓库卫生检查通过。
|
||||
- 登记手机 android-test-a:ADB 与 root 门禁通过,所有自动点击、滑动及输入经 root;语义节点仅用于读取目标实时位置。
|
||||
- 约 340dp 宽度,字体 1.0/1.3 的竖屏及字体 1.3 横屏:四栏、三点菜单和关于操作通过,分别 8.656/8.983/9.191 秒。字体、旋转、密度均恢复。该检查验证可见控件及操作,不代表所有设备布局均已验证。
|
||||
- 实际 Activity:91.814 秒通过。四栏、精简页面、菜单、后台 30 秒释放及返回重连、永久昵称写入后重新连接、恢复原昵称、取消记忆后断开及手动重新连接通过。
|
||||
- 最新完整 BLE 真机回归:301.514 秒通过。60 轮状态和画面读取,设备持久混合内容顺序摘要一致,两次加密会话、配置冲突后会话保持、当前 WiFi 立即重应用并保留密码、原动画暂停/位置/速度恢复、亮度当前值写入、默认内容读回、Controller 内容/设置读取、后台释放及前台重连均通过。
|
||||
- 最新 root 真机 WiFi 专项通过:validate、validate_invalid、scan、wrong、inspect_failure。扫描填入、确认取消不提交、密码替换输入、明确 AUTH_FAILED 与“密码错误”中文反馈通过。错误后核对原网络配置摘要及连接,日志不含测试密码,恢复备份/定时器和私有测试材料已清理。
|
||||
- WiFi 表单先前实测通过:空名称不能保存、DHCP 关闭展开静态字段、确认弹窗、取消不提交、非法 IP 拒绝;此过程未改变原网络。
|
||||
- 真实 systemd stop/start:运行目录保留、配置/网络/持久身份摘要不变、移动接口恢复及无遗留手机会话均通过。
|
||||
|
||||
## 失败与修复记录
|
||||
|
||||
布局测试初版的直接命令引号不被 UiAutomation 解释,随后显示配置变更终止 instrumentation;改由电脑端调整并在 finally 恢复,启动测试后仅读取语义位置和 root 输入。重复文字选择改为可见节点定位后,三种布局通过。没有使用无障碍动作注入。
|
||||
|
||||
WiFi 专项首次 wrong 阶段在提交前建立 BLE 失败;未把此失败算作密码测试。正常阶段增加显式断开并在无手机会话下恢复服务后重跑,各阶段通过。
|
||||
|
||||
最新 Activity 首次未找到扫描目标,51.460 秒失败;真实服务生命周期恢复后重测通过。保留失败,不声称已定位此偶发问题的根因。
|
||||
|
||||
## 边界
|
||||
|
||||
真实多设备切换需要两台可用设备,本轮仅模拟验证;旧 Android 版本未实测。跨 SSID、实际 DHCP/静态地址互换缺少可用第二网络,未验证。驱动与底层显示输出未修改,实屏视觉检查不适用;未启动摄像头、未主动切换测试图案。
|
||||
|
||||
## 交付
|
||||
|
||||
见 `../构建与发布/交付包/0.2.0-3/`。SHA-256、北京时间构建日期、工具链和源码摘要见 manifest.json 与 SHA256SUMS。最终 verify 阶段通过:App 显示原网络及实际 IP,板端原网络连接、服务运行、恢复材料清理均核验通过。测试手机最终覆盖安装 0.2.0 / code 3,读取已安装 base.apk 的 SHA-256 与交付 APK 完全一致。最后仓库卫生检查通过(579 个候选文件),未输出秘密值。
|
||||
|
||||
## 可复用经验同步
|
||||
|
||||
本轮已验证处理方法已整理到 [常见问题与排障](../如何安卓测试/常见问题与排障.md),并同步测试流程、构建说明及根/移动端协作规则。包括命令解析与 LF、布局变更导致测试终止、可见语义节点选择、Compose 开关定位、root 文本编辑和键盘判断、权限安装后复核、阶段主动断开及 WiFi 定时恢复。偶发扫描失败的根因仍未确认;本记录不将服务恢复后通过当作根因证明。后续每轮测试完成反馈都要说明经验文档更新。
|
||||
@@ -0,0 +1,36 @@
|
||||
# 当前实施状态
|
||||
|
||||
更新时间:2026-09-26。当前 App 为 **0.2.0 / versionCode 3**,四栏界面优化已实现。交付包:`../构建与发布/交付包/0.2.0-3/`,本轮证据与边界见 `2026-09-26_四栏界面优化.md`。设备功能已部署,协议主版本仍为 1;不导出 OTA/IMG、不推进设备发布版本。
|
||||
|
||||
已通过:独立构建、JVM 13 项、设备相关回归 46 项、root 真机四栏/菜单/设备重命名与记忆/后台连接生命周期、窄屏大字体横屏导航、真实 systemd 生命周期。完整 BLE(301.514 秒)、错误密码明确分类及原网络恢复、最终覆盖安装摘要核对均通过,详见本轮报告;真实多设备、旧 Android、跨 SSID 与实际 DHCP/静态互换不能按模拟或表单测试记为通过。
|
||||
|
||||
以下保留上一轮历史状态,历史 APK 及三页 UI 结果不能代替本轮验收。
|
||||
|
||||
# 首版历史实施状态
|
||||
|
||||
更新时间:2026-09-25。本文件是续作入口,不能将设计目标或局部通过当作全量交付。
|
||||
|
||||
| 项目 | 已确认结果 |
|
||||
|---|---|
|
||||
| 环境 | 用户安装 Android Studio 并确认中文可用;KMP/Compose 三模块、锁定工具链、Wrapper 可构建。 |
|
||||
| 独立构建 | 中文源码保留原位,工具不支持时按脚本复制到仓库外 ASCII 目录;全新且带空格目录的 92 个任务通过。 |
|
||||
| Android 连接修复 | 修复内部超时被取消异常吞掉、MTU 缓存回调导致发现服务停滞、断线旧状态残留与迟到扫描回调问题。 |
|
||||
| 真机 Activity | 主测试机 root 用途均已由用户明确授权。最新连接恢复版三页、蓝牙关闭/恢复、后台释放和返回重连通过,65.637 秒。 |
|
||||
| 连续 BLE | 早前完整测试通过,290.908 秒。最新复测 60 轮完成,但主动断开后的第二次 GATT 建立返回状态 62;不得记作整轮通过,按正式 App 重新扫描后,完整复测 277.369 秒通过;保留此前失败,不宣称已证明根因。 |
|
||||
| 双手机 | 主机占用时第二台扫描不到;主机异常退出后第二台连接并操作成功;用户退出第二台后会话释放且广播恢复。用户未逐项说明操作,不扩大为所有写功能通过。 |
|
||||
| 网络 | 真机扫描、过期配置冲突、重新应用当前静态网络并保留密码通过。修复 nmcli 多 DNS 的逗号/换行解析;不同 SSID、错误密码和 DHCP/静态互换尚未全部实测。 |
|
||||
| 设备部署 | 最新代码已部署,功能时间 2026-09-25T21:46+08:00,设备 VERSION 仍为 1.1.1。最新恢复副本 `/opt/matrix-screen-controller.mobile-backup-71e6e1b8dcfe`。 |
|
||||
| 生命周期 | 真实 systemd stop/start、运行目录保留、配置/网络/持久身份摘要不变、BLE 恢复通过;不等同完整故障回滚或 OTA 验收。 |
|
||||
| 性能 | 150 秒 122 样本;原动画持续,刷新约 97.4 Hz、截止丢失增加 1、OE 故障 0,无驱动错误;未做蓝牙关闭的因果对照。 |
|
||||
| 本机回归 | 修复与新增测试后全套 461 通过、9 跳过;复用已安装 FFmpeg 后补测 6 项通过,剩余 libheif、Windows 目录符号链接、专用旧 worker 隔离探针未在此轮运行。 |
|
||||
| 当前 APK | 最新包为 `../构建与发布/交付包/0.1.0-2/`,源码独立重建、debug 签名验证通过;实际 Activity 三页/蓝牙切换/后台重连通过,60.105 秒。code 1 保留为此前双手机测试包。 |
|
||||
| 视觉 | 不适用;没有修改显示驱动或输出实现,未启动摄像头或切换实屏测试图案。 |
|
||||
|
||||
## 当前进行中的工作
|
||||
|
||||
1. 最新 UI 补充预览确认时间/过期提示、当前开机默认名称、内容类型、临时密码可见开关,以及拒绝权限后的说明入口;DHCP 提交清除残留静态 DNS。重新构建通过,BLE 与生产 Controller 完整真机复测通过;新版实际 Activity 回归通过,已打包到 0.1.0-2。
|
||||
2. 第二次连接测试先重新扫描,避免跨会话复用临时连接句柄;保留之前状态 62 的失败证据,不宣称已证明根因。
|
||||
3. 网页生成索引和首次载入连接提示修复已部署;真实开发部署故障回滚及恢复后生命周期检查通过。后续 OTA 蓝牙事务补充已通过 35 项本机测试,已部署并核对文件摘要一致;本轮不导出 OTA。
|
||||
4. 逐项核对需求/实现/验收差异,整理最终报告、APK、签名与摘要;当前值写入/动画暂停恢复真机通过;完整内容选择、默认保存、权限各分支、旧 Android 版本和完整 OTA 未全部实测,不能冒充已验证。
|
||||
|
||||
详细历史见 `2026-09-25_重启与连接恢复.md`。未来设备更新只登记移动端影响,不自动发布 App。本轮仅 debug 签名,不导出 IMG/OTA,不推进设备发布版本。
|
||||
Reference in New Issue
Block a user