适用于吉利银河 L7 / Flyme Auto 车机系统的网易云音乐方向盘按键增强工具
当前版本:v0.6.10(versionCode 16)
本项目用于解决银河 L7 / Flyme Auto 上网易云音乐在冷启动或后台回调失效后,实体播放键无法可靠控制播放/暂停的问题,同时提供按日出、日落自动切换车机日间/夜间模式的功能。
- 🎵 冷态播放恢复:网易云完全退出后,按方向盘播放键自动启动并开始播放,主屏不出现网易云页面
- ⏯️ 热态播放/暂停:优先使用车机原生媒体链路,回调失效时自动恢复
- 🪟 小窗保护:返回桌面后打开网易云小窗,音乐保持正常播放不退出
- ⏰ 续播恢复:小窗暂停后再次播放从原进度继续
- 🌅 日夜自动切换:根据日出/日落时间自动切换车机日间/夜间模式
- 🔄 重启自恢复:车机重启及休眠唤醒后,所有功能自动恢复
实体播放键(keyCode 200085)
-> Helper 读取按键日志并判断网易云媒体状态
-> 热态:等待并验证原生媒体链路;必要时恢复回调并发送明确 PLAY/PAUSE
-> 冷态:截取桌面并显示不可交互遮罩
-> 通过本机受控特权桥在物理主屏启动网易云,使音频获得 zone 0
-> 等到媒体进入连接/缓冲/播放状态
-> 将网易云 RN Activity 移到 Helper 的私有虚拟显示
-> 移除遮罩,主屏仍为桌面
- Android 8.0(API 26)及以上;当前实车验证环境为 Android 11
- 允许安装第三方 APK
- 可授予以下权限:
READ_LOGS(读取系统日志以识别实体按键)- 精确定位/粗略定位(用于日出/日落计算)
- 通知使用权(监听媒体会话状态)
- 辅助功能权限(显示冷启动遮罩)
- 网易云音乐车机版(
com.netease.cloudmusic.iot)能正常登录并播放
关于冷启动无前台切换:要实现"冷启动不显示网易云页面",运行时必须存在持久、受控的本机特权执行通道。本车使用开机常驻的 root telnetd(IPv6 回环
::1:23)及/system/bin/busybox。若目标车机不具备相同条件,需采用可见启动路径或另行适配。
详细适配要求请参阅 新车机适配指南。
.\scripts\build.ps1构建产物输出到 dist\FlymeNeteaseHelper-v0.6.10.apk
构建工具链位置默认在
C:\Users\<用户>\AppData\Local\CodexTools\FlymeHelper,请根据实际环境修改scripts/build.ps1中的$toolRoot。
安装时先保持 observe 模式,确认按键日志、权限和目标组件匹配后再切换为 active:
# 安装并配置(observe 模式)
.\scripts\install-observe.ps1
# 检查状态
.\scripts\status.ps1
# 切换为 active 模式
.\scripts\set-mode.ps1 active# 观察模式(只记录不动作)
.\scripts\set-mode.ps1 observe
# 启用
.\scripts\set-mode.ps1 active
# 停用
.\scripts\set-mode.ps1 disabled# 启用日夜自动切换
.\scripts\set-day-night.ps1 -Mode active
# 停用日夜自动切换
.\scripts\set-day-night.ps1 -Mode disabled.\scripts\rollback.ps1FlymeNeteaseHelper/
├── app/src/
│ ├── main/
│ │ ├── AndroidManifest.xml # 应用清单
│ │ ├── java/com/flymeauto/neteasehelper/
│ │ │ ├── HelperCoordinator.java # 主协调器:按键去抖、状态机、冷热态恢复
│ │ │ ├── CoreLogic.java # 核心决策逻辑(纯 Java,可主机侧测试)
│ │ │ ├── KeyLogMonitor.java # 按键日志监听
│ │ │ ├── MediaStateInspector.java # 媒体状态检查
│ │ │ ├── ColdStartCover.java # 冷启动遮罩
│ │ │ ├── TelnetDisplayBridge.java # 本机特权桥(截图/启动/迁移)
│ │ │ ├── InvisibleDisplayHost.java # 私有虚拟显示管理
│ │ │ ├── DayNightController.java # 日夜模式控制器
│ │ │ ├── SolarSchedule.java # 日出/日落计算
│ │ │ └── ...
│ │ └── res/ # 资源文件
│ └── test/ # 主机侧单元测试
├── scripts/ # 构建、安装、调试脚本
├── docs/
│ ├── architecture.md # 架构与原理说明
│ ├── install-guide.md # 安装与部署指南
│ ├── compatibility.md # 新车机适配指南
│ ├── day-night.md # 日夜模式说明
│ └── evidence/ # 实车验证记录
└── dist/ # 构建产物(.gitignore)
| 文件 | 职责 |
|---|---|
HelperCoordinator.java |
按键去抖、媒体状态机、冷热态恢复、超时和回桌面控制 |
CoreLogic.java |
纯 Java 核心决策逻辑,可在主机侧单元测试验证 |
ColdStartCover.java |
用主屏截图创建不可交互的辅助功能遮罩,避免冷启动页面暴露 |
TelnetDisplayBridge.java |
通过受控本机特权桥执行固定截图、主屏启动和 Activity 迁移动作 |
InvisibleDisplayHost.java |
建立私有虚拟显示并维持隐藏 Activity |
MediaStateInspector.java |
异步读取网易云 MediaSession 状态,避免阻塞按键处理 |
DayNightController.java |
日出/日落触发的厂商 PowerService 日夜切换 |
SolarSchedule.java |
基于 NOAA 算法的日出/日落时刻计算 |
- 🔒 特权桥只执行源码内固定命令,不接受外部任意 shell 文本
- 🔒 虚拟显示编号必须通过整数校验
- 🔒 不修改
/system、/vendor或 LifeControl - 🔒 冷启动超时会移除遮罩、回到 HOME 并停止本次恢复,避免遮住主界面
- 🔒 控制广播由
android.permission.DUMP保护
详见 CHANGELOG.md
最新版本实车验证记录:v0.6.10 验证报告
验证环境:
- 车型:吉利银河 L7 / ECARX G636
- 系统:Flyme Auto / Android 11
- 网易云音乐车机版:6.1.20
- 验证日期:2026-08-20