Skip to content

升级 Android Controller 与 Sony/iOS 跨端 BLE 稳定性 - #6

Draft
a3384379 wants to merge 10 commits into
masterfrom
codex/chinese-project-introduction
Draft

升级 Android Controller 与 Sony/iOS 跨端 BLE 稳定性#6
a3384379 wants to merge 10 commits into
masterfrom
codex/chinese-project-introduction

Conversation

@a3384379

@a3384379 a3384379 commented Jul 26, 2026

Copy link
Copy Markdown
Owner

变更内容

  • 将旧 ControllerApp 重构为 Jetpack Compose + ViewModel + StateFlow 的 Android BLE V2 正式控制端。
  • 新增前台连接服务、串行 GATT Transport、能力协商、健康探测、指数退避重连与 MediaSession/MediaStyle 后台控制。
  • 对齐 iOS 的逐字/完整歌词、翻译/罗马音、Preview/HQ 封面、历史统计、设置、系统健康、歌曲/歌词诊断与调试工具。
  • 支持 Legacy 与 A1/A2 协议、zlib、CRC、缺包重传及 trackId + generation + transferId 旧内容栅栏。
  • 增加 40 项/32MB Bitmap 内存缓存、30 天磁盘缓存、stale-while-revalidate、后台降采样和上次播放快照。
  • RFCOMM 仅保留为调试模式下的手动兼容入口,正式链路统一使用 Sony BLE V2。
  • Sony 端补充 MTU 517 的 512 字节 GATT 属性上限保护,避免超长通知导致传输停顿。
  • GitHub Actions 增加 Controller 单测、Debug APK 构建与 artifact 上传。
  • 更新英文 README、中文 README、项目总览、GitHub 仓库简介和搜索主题。

兼容性

保持现有应用 ID、BLE UUID、Sony 控制命令、QRC 解密逻辑、V2/旧协议和 iOS 功能不变。Android 与 iOS 可作为替换控制端使用,同一时刻只建议连接一个控制端。当前仍仅支持 Android 版 QQ 音乐。

验证

  • Controller 单元测试:17/17 通过;Sony 单元测试:47/47 通过。
  • PlayerAgentAppControllerApp Debug 构建、Controller Release、AndroidTest APK、Lint 全部通过。
  • Android 17 模拟器 Compose UI 测试:2/2 通过。
  • iOS 模拟器 XCTest:9/9 通过;修复 GitHub Xcode 16.4 下异步封面用例的时序抖动。
  • GitHub Actions:Android 与 iOS 两个 Job 均通过,并上传 Controller/PlayerAgent APK。
  • 真机验证:Xiaomi 2210132C(Android 15)连接 Sony NW-WM1AM2(Android 11),V2/MTU 517/通知订阅、封面、三行歌词、逐字高亮、进度、音量和后台通知均正常。
  • 100 次快速切歌压力测试无崩溃、ANR、传输卡死或错误断连。
  • 连续约 2 小时播放/后台驻留共 129 个采样点,进程与前台服务全程存活,0 次 ANR、崩溃、写超时或错误断连。

本地 tools/deploy/ios_deploy.sh 改动与部署状态文件未包含在提交中。

@a3384379 a3384379 changed the title 优化 QQ 音乐跨端歌词、封面与 BLE 稳定性 升级 Android Controller 与 Sony/iOS 跨端 BLE 稳定性 Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant