Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flyme Auto 网易云音乐自动播放

CI License Version

适用于吉利银河 L7 / Flyme Auto 车机系统的网易云音乐方向盘按键增强工具

当前版本:v0.6.10versionCode 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.ps1

项目结构

FlymeNeteaseHelper/
├── 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

文档索引

许可证

Apache License 2.0

About

Flyme Auto 网易云音乐方向盘按键增强工具(吉利银河 L7)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages