Repository navigation
DiPlay 2.0(158)· leapmotor
DiPlay Android 7 构建版 · 功能状态(零跑版)
版本号 = 构建号,见 APK 版本名
2.11(NN)与诊断报告第一行(大版本 2.11 与上游 0.2.11 对齐)。
签名:固定 release 密钥(platform,SHA-256C8:A2:E9:BC:CF:59:7C:2F:B6:DC:66:BE:E2:93:FC:13:F2:FC:47:EC:77:BC:6B:2B:0D:52:C1:1F:51:19:2A:B8)。
本页描述当前整体状态;每次构建的本次改动由 CI 自动附在文末(取自本次提交说明)。
🆕 新增(beta 验证后移入可用)
以下功能来自 beta 分支实测线(EasyPlay 对比分析移植),尚未在零跑真机全量验证:
- 方控学习:设置 → 方控学习。按一次车上的按键绑定到 上一首 / 下一首 / 播放 / 暂停 / 播放暂停;
学习键优先于内置零跑映射,未学习键一律忽略(免疫车机内部命令回环)。
另有"监听方控广播日志":按 action 记录最近 12 条方控广播,点选即绑定为整条总线的键。 - CarPlay 接管时断开车机蓝牙音频(默认开,可关):反射断开手机的 A2DP / 通话音频 profile
(只断连接、不断配对),避免"画面在 CarPlay、声音走车机蓝牙"。 - 外部 Wi-Fi 加密识别 + 连接前拦截:自动按车机已保存的 Wi-Fi 配置识别加密方式
(不再把空密码当开放网络通告);加密网络且未设密码时点"无线连接"会弹出密码输入框
(保存并连接),开放网络直接连;Wi-Fi 名称自动读取。 - 分辨率 31 档(25%–175%,5% 步进):每档标注按本车机屏幕计算的实际输出像素与 P 值
(如 100% · 约1280x720(原生)、70% · 约896x506(506P));CarPlay 内滑条同步;
旧档位自动迁移。放大档超限由 4K 上限与解码器能力检查兜底。 - 全屏拆分开关:全屏 + 隐藏状态栏 + 隐藏导航栏三个开关互锁——打开"全屏"自动关闭
两个单独开关(隐藏两者),打开任一单独开关自动关闭"全屏";更改后 CarPlay 在线自动重连生效,
且设置页就地刷新开关状态、不再跳回顶部。 - 在线更新:设置 → 检查 GitHub 新构建 → 自动下载(支持直连/代理)→ 确认后静默安装
→ 自动重启 → 清理 APK。 - 有线 lwIP 传输(实验,默认关):本构建为 armeabi-v7a 单 ABI(32 位),lwIP 默认关闭、
有线默认走 VPN 路径,可在设置手动打开"有线走 lwIP 用户态网络栈"来测试。
NCM 帧直灌用户态 lwIP 栈(无 VPN/内核路由),经回环代理进入 AirPlay 服务。
lwIP 库不可用时自动回退 VPN 路径;有线连不上时可到设置关闭再重试。
实测观察:诊断报告应出现wired lwip transport started(成功)或
falling back to the VPN transport ... error=(失败原因)。
(2.11(120)修复 lwIP 加载失败的真正原因:依赖库 androidx.graphics 自带了 arm64-v8a 的
so,让 64 位车机按 64 位安装应用——64 位进程无法加载 v7a 的 lwIP 库。现已在应用层把
全部 native 库锁定为 armeabi-v7a,进程为 32 位,lwIP 可正常加载。
2.11(122)继续修复:栈启动后 iPhone 仍不发起连接的原因——车机 NCM 侧 MAC 全零时
lwIP 网卡的 IPv6 链路本地地址随之无效,iPhone 的邻居发现(NDP)得不到有效回应,
TCP 永远发不出来(EasyPlay 的处理:MAC 全零时现场生成随机本地管理 MAC)。已对齐。
2.11(123):lwIP 帧增加协议分类诊断(逐帧标注 ICMPv6 NS/NA/TCP-SYN 等类型与地址)与
代理 accept 心跳。
2.11(125):帧分类诊断定位到 lwIP 连不上的最终真因——iPhone 的 TCP 已经能进入
lwIP 并被代理转发到 AirPlay 服务(SYN/SYN-ACK/ACK 全通、数据到达),但 AirPlay 服务把
来源 127.0.0.1 的转发连接误判成"自检连接"直接关闭(isLocalSource 判定包含回环接口)。
现已为 lwIP 代理模式加 loopbackRelay 标记放行转发连接,iPhone 的会话可正常建立。
2.11(136)修复"卡在正在打开 CarPlay"(135 报告定位):
① attachWireless 构造 AirPlayAttachment 时漏传 loopbackRelay/portNotifier——控制链路
(7000)能通但会话内 portNotifier 为空,SETUP 应答里的 eventPort(41880)永远没有 lwIP
中继,iPhone 每两秒重试连接全被 RST,事件通道建不起来,30 秒后手机放弃(peer EOF)。
② 同批补上 UDP 桥(第二层):SETUP 应答里的 timingPort(NTP 对时)/keepAlivePort 现在也有
双向数据报中继(lwIP ↔ 127.0.0.1,"最近手机源"地址映射)——此前 UDP 全部丢弃,
对时失败手机不会开始推流。诊断报告应新增
wired lwip proxy listening port=<eventPort>与wired lwip udp proxy listening port=<timingPort>。
2.11(138)修复灰屏(137 报告定位):事件/NTP 监听改绑 127.0.0.1 字面量——此前绑
getLoopbackAddress()(该值在本车机不是 127.0.0.1),IPv4 中继永远 Connection refused →
事件通道死 → forceKeyFrame 发不出 → 解码器等不到关键帧(shown=0.0fps)→ 灰屏。
138 实测:lwIP 已出画面。
2.11(139)修卡顿(138 报告定位):中继链路 TCP 全程关闭 Nagle——
138 日志显示视频流以 ~1 秒为粒度断续到达(readMaxMs 恒 ≈1000、touch2frame 83-207ms,
VPN 路径约 30ms),是 lwIP 侧与回环中继两侧的 Nagle/延迟 ACK 相互作用所致。
现 lwIP accept 的连接、出站连接、回环中继 socket、屏幕流 accepted socket 全部
TCP_NODELAY;触控延迟应回到 ~30-40ms,视频 maxGap 应从 1.5s 降到 ~100ms 级。 - CarPlay 尺寸新增 HiDPI 2x / 3x(本版新增):设置 → CarPlay 尺寸在大/中/小之外新增两档——
向 iPhone 申报更小的物理屏宽(150mm/100mm),控件相对排布放大、像素密度翻倍/三倍,
图标与文字更大更锐利(等效 2x/3x HiDPI 面板)。应用后重连 CarPlay 生效。 - 视频解码方式切换(硬解/软解,本版新增,AutoKit 同款):设置 → 显示与性能 → 视频解码方式。
默认硬解(MediaCodec 直出 Surface 零拷贝);车机硬解画面异常时可切软解(OMX.google 软件解码器,
画质不变、CPU 占用更高)——排查画面问题的二分利器。选择页显示"车机硬解上限 WxH"能力探测
(排除 Google 软解组件),应用后重连 CarPlay 生效。 - 有线 USB 授权记忆(本版新增,AutoKit 同款机制):设备过滤器加入 Apple VID(0x05AC)——
首次插入 iPhone 时系统弹"打开方式"对话框,勾选"始终"后,之后每次插拔与强制重枚举
都由系统自动拉起 CarPlay 并自动授权,不再反复弹 USB 授权框(此前每次插线要授权两次)。
注意:首次弹的是"是否用 DiPlay 打开此设备",请勾选"始终/默认"。 - 零跑 T03 方控支持(本版新增):T03 方控的真实通路是系统 media key 分发——ICU 把
按键交给当前活跃的 MediaSession(模拟器实测:MediaSessionService: Sending KeyEvent KEYCODE_MEDIA_NEXT to com.leapmotor.multimedia,D/loger 即 T03 多媒体的日志)。
DiPlay 的媒体会话此前没有按键回调、按键被丢弃。现已在 DiPlay 的媒体会话上实现完整
MediaSession.Callback(上一首/下一首/播放/暂停/播放暂停,PlaybackState actions 全集声明),
CarPlay 会话活跃时方控键直接转发给 iPhone——无需任何学习或配置。
并行路径com.leapmotor.ICU2MMICtrl广播同步保留:广播日志里按键以签名条目出现
(ICU_MediaSwitch=1 / ICU_MediaSwitch=2 / ICU_MediaKey=1 内置识别),可点选绑定;
250ms 去重窗口保证广播与 media key 双路径同按时只转一次。
2.11(131)协议修正(T03 多媒体 APK 反编译 + 模拟器实测三指令全通):T03 方控广播的
extras 名为ICU_MediaKey/ICU_MediaSwitch(非 mediaKey/mediaSwitch),且原厂方控通道
为com.leapmotor.customkey.music.pauseplay(已一并监听)。模拟器实测:上一首/下一首/
播放暂停三条指令全部真实切歌与暂停(酷狗 tvsdksong change/onPause日志为证)。 - 包名恢复说明:2.10(116)的包名被误改为
.betatest,本版恢复com.shihab.diplay.hudtest。
装过 116 的设备无法在线更新到本版(包名不同会被安装器拒绝),请手动下载本版 APK 安装一次,
之后在线更新恢复正常;旧的 116 可在装好后卸载(数据不共享)。 - MFi 材料兜底:身份资产缺失/损坏时设备内生成 EC P-256 + 自签 X.509(实验身份),
构建不再因无资产而不可用。 - 车厂集成能力探测:启动时探测零跑/ECARX/BYD 集成锚点写入诊断报告(
oem probe:行)。
✅ 可用
- 有线 CarPlay:视频 24–26 fps、LPCM 音频零丢包、触控延迟约 35 ms,长会话稳定。
有线期间车机其他 app 可正常上网(VPN 只接管 CarPlay 的 IPv6 链路,IPv4 放行)。 - 无线 CarPlay(外部 Wi-Fi 方案,默认方式):车机与 iPhone 连接同一个外部网络
(如随身 WiFi),视频约 23–30 fps,触控可用。完整流程已实测跑通:
AirPlay 连接 → 会话建立 → 蓝牙交接完成(handoff/complete)。
SSID、密码、信道全部自动读取网络真实值,无需手动设置。 - 方向盘媒体键(零跑方控):监听车机的
car.meter.music.BROADCAST广播,上一首 / 下一首 /
播放暂停 转发给 iPhone(CarPlay HID);仅转发真正的方向盘键,车机内部命令(如焦点变化时
自己广播的pause)一律丢弃。CarPlay 播放时原厂播放器由音频焦点压停。 - 倒车自动暂停(零跑 CAN 档位):通过
carcanserver的广播接口(leapmotor.apptocan.update
→leapmotor.cantoapp.update,信号1010105)读取挡位 P/R/N/D;挂 R 自动暂停 CarPlay 音乐,
退出 R 自动恢复(仅恢复本次倒车中自己暂停的)。 - 定位上报(iPhone 导航用):已启用,1 秒限流。0.2.11 起改为按链路独立订阅:
蓝牙引导链不再宣告定位,定位在 Wi-Fi 隧道链路上按 iPhone 的请求上报(旧版"蓝牙请求
带到 Wi-Fi 链路"的延续机制已按上游移除——语义变化,待真机确认导航正常)。 - 有线自愈:配对记录或 host ID 被车机 Lockdown 拒绝时自动清除并重新配对,不再直接失败
(新 iPhone 首连报 InvalidHostID 的修复已包含,请使用 v2.0-84 及以上构建)。 - 界面汉化:约 520 处全部完成,应用名
DiPlay。 - 版本溯源 + 诊断报告:构建号烙进版本名与诊断报告第一行;设置 → 关于与诊断 → 保存诊断报告,
含显示协商、多代历史日志、无线判层结论、连接诊断行。
🆕 新增(待真机验证)
以下功能已并入构建并通过 CI(编译 + 全部单元测试),但尚未在真机上实测确认;
验证可用后移入"✅ 可用"。
- 歌曲信息与专辑封面(0.2.10 同步):CarPlay 正在播放的歌曲名 / 艺人 / 播放进度 /
专辑封面会写入 Android 系统媒体会话——车机的媒体卡片、锁屏等界面可以显示;
iPhone 端的播放位置也持续同步,不再停在旧值。 - AirPlay 端口自动选择(0.2.10 同步):车机上其他程序占用 7000 端口导致
"连接不上"的场景自动避开——先试 7000,被占则依次尝试 7001–7010,最后由系统分配,
并把实际端口通过 Bonjour / iAP2 告知 iPhone,无需人工处理。 - 通话回声消除 / 降噪(0.2.10 同步):CarPlay 通话时自动切到 Android 通信音频模式
(启用通话下行通路),并启用平台回声消除 / 噪声抑制;麦克风采集失败不再影响音乐播放。 - iOS 27 视频车内播放(0.2.10 播放器升级):iPhone(iOS 27)在 N 挡时可以把视频
投到车机播放。新播放器支持进度条拖动 / 快进快退 10 秒 / 播放暂停(方控键同样可控制);
支持 HLS 流式视频;App 内自有协议的视频地址由 iPhone 代为下载(原 Apple 接收端同款机制)。
离开 N 挡自动关闭;FairPlay 版权保护内容(如 Apple TV+)无法播放,会提示并自动跳过。 - 视频画面等比适配(0.2.10 同步):CarPlay 画面按会话分辨率等比显示(黑边补齐),
黑边区域的触摸不再误传给 iPhone;倒车影像引起的窗口缩放不再重启 CarPlay 会话。 - 连接诊断进报告(0.2.10 同步):蓝牙连接前后快照、USB 配置识别、USBMUX 链路收发、
各资源关闭耗时、麦克风启动失败原因等关键节点都会以CONNECTION_DIAGNOSTIC行写入
诊断报告,问题定位不再依赖猜。 - USB 数据流 padding 精准处理(0.2.10 同步):iOS 27 手机在 USBMUX 握手帧后追加的
4 字节 padding 只在确认边界时跳过,误判不再导致握手卡死;
USB 有线会话也不再要求先完成无线热点设置才能启动。 - Wi-Fi Direct 兼容性兜底(0.2.10 同步):未知安全类型按 WPA2-PSK 处理不再中断;
建组被拒时继续尝试下一信道(含 5 GHz → 2.4 GHz 回退),无权限类错误立即报告不空转。 - 在线更新(本版新增):设置 → 在线更新 → 检查 GitHub 上的新构建;
高于当前版本时自动下载 APK → 弹确认 → 静默安装(platform 签名)→ 自动重新打开 DiPlay →
删除已装的 APK。支持直连 GitHub 或代理下载
(seep.eu.org/jsnzkpg4.pages.dev/down.nigx.cn,任选其一)。 - VPN 改为仅覆盖 DiPlay 自身(本版新增):有线连接时的本地 VPN 只白名单 DiPlay 自己的包名,
车机上其他所有 app(含飞牛com.trim.app)完全绕开 VPN——此前它们的链路本地 IPv6 流量
会被 VPN 吞掉导致"没网",现在与未连 CarPlay 时一致。 - 外部 Wi-Fi 名称自动填入(本版新增):设置里的 Wi-Fi 名称不再需要手动输入——
打开设置页或切换无线方式时自动读取车机当前连接的 Wi-Fi 并写入(开放网络可不填密码,加密网络必须填写密码);
车机未连 Wi-Fi 时会显示引导提示。
上游 0.2.11 第二批移植(A/C 类,待真机验证)
- 媒体会话元数据去重(0.2.11):iPhone 每秒约两次只为了更新进度就重发 NowPlaying——
旧实现每次都把封面位图重新发布进 system_server,弱车机上几分钟就能耗尽内存。
现在仅在真正的元数据变化(歌名/艺人/专辑/封面等)时才发布,进度与播放状态走
PlaybackState;部分更新(只有进度)保留艺人字段不再清空。本次同时把元数据发布
补进了零跑分支的媒体会话(此前该功能只在上游/BYD 分支存在)。 - 车内视频就绪门控(0.2.11):parked-video 可用性改为在 SETUP 完成且 AirPlay 加密
事件通道就绪后才下发给 iPhone(airplay video event ready availability=...);
早到的挡位更新不再被丢弃导致 iPhone 整个会话停在纯音频模式。 - 无线链路角色分离 + Wi-Fi 链路定位(0.2.11):蓝牙 RFCOMM 链路现在是短命的
"引导链"——只做认证和递交 Wi-Fi 端点,不再宣告定位能力(iOS 会把定位绑到蓝牙端点,
RFCOMM 断开后拒收 Wi-Fi 链路上的同一数据);运行时 Wi-Fi 隧道链路保留完整定位宣告,
各链路的定位订阅相互独立(蓝牙上的请求不再授权 Wi-Fi 链路输出,0xFFFC/链路关闭
均正确停止)。 - Bonjour 连接探测分阶段上报(0.2.11):
_carplay-ctrl._tcp探测现在逐阶段上报
(CONNECTING / TCP_CONNECTED / REQUEST_SENT / 失败点),并新增计数快照
(bonjourAdded/bonjourResolved/connectProbes/connectProbe2xx/lastProbe)挂进无线
verdict 日志——无线卡"发现→连接"哪一步一眼可判。 - Wi-Fi Direct 首选信道设置(0.2.11):设置 → 无线连接新增"首选 Wi-Fi Direct 信道"
(自动 / 1–11 / 36–165 非重叠信道),保存后下次连接生效;个别环境固定信道可避开
自动选到的拥挤信道(本车的 Wi-Fi Direct 路径仍受内核防火墙限制,见"暂不可用")。 - Android TV / 遥控器支持(0.2.11):TV 形态(Leanback/TV 特性或无触摸屏)下
D-pad/系统导航键直接映射 CarPlay 原生旋钮 HID(方向=旋钮、确认/返回=按下抬起,
支持长按重复);设置手势指纹数可在 2/3/4 指间切换(连接页按钮,部分车机保留三指)。 - 设置手势指纹可调(0.2.11):连接页新增"设置手势:N 指"按钮,2→3→4 循环并持久化。
🔴 暂不可用
- 无线 CarPlay · 车机自建热点 / Wi-Fi Direct:Android 7 内核会丢弃热点客户端发往车机
7000 端口的流量(IPv6 静默丢弃,无 root 无法放行防火墙),iPhone 拨号无响应。
实测确认 0.2.10 的端口自动选择(7001–7010)同样被丢弃——内核防火墙拦的是整个端口段,
应用层无法绕过;此路径留待后续测试研究。无线请使用"外部 Wi-Fi"方案
(车机与手机连同一个网络)。 - 有线改设置后自动重连:改设置后仍需重新插拔数据线才会重连(重枚举后系统
会再次弹 USB 授权,属系统行为)。
⚠️ 已知限制
- 外部 Wi-Fi 方案需要第三个网络:车机与 iPhone 必须连在同一个 Wi-Fi(如随身 WiFi),
该网络需允许设备互访(未开客户端隔离)。车机尚未连接 Wi-Fi 时,App 会静默等待
(不再周期性重试刷屏),车机连上后自动继续。 - 有线会话偶发等待重枚举:约 10 秒内自动恢复,极少数情况需重试一次。
- 无线丢帧波动:外部 Wi-Fi 网络质量波动时可能短时掉到 10 fps 以下并自行恢复。
- iOS 27 视频:仅 iOS 27 手机可用;N 挡限定(零跑没有 P 挡读数,与上游的 P 挡不同);
版权保护内容不可播。视频与 CarPlay 画面共用一块车机屏,播视频时 CarPlay 在后台保持连接。 - 挡位信号来源:依赖零跑
carcanserver广播接口;收到第一条挡位数据前
一律按"不可用"处理(视频不开、倒车不触发)。 - 上游 BYD 专属功能未移植(与本分支无关):CAN/CANFD 电池信息、仪表盘地图镜像与
歌曲卡片、桌面小组件、地图共享给第三方桌面、乌克兰语翻译。零跑分支保持纯度,
不引入依赖 BYD HUD/SOME-IP 的代码。
本次构建(2.0(158)· leapmotor)
完整移植 PSA hotspot-ipv4 的车载热点连接层(替换全部自制混合实现)
按用户指示放弃在现有源码上打补丁的做法,将 PSA hotspot-ipv4 源码的车载热点层整体移植:
- 整取 PSA 版本:ManualHotspotManager(ManualHotspotInterfaces 样本 + ManualHotspotReadiness 轮询等待——AP 起来后等待接口出现并持有可拨 IPv4,最多 15 秒,解决"wlan2 刚起只有 IPv6 就失败"的时序问题;HotspotAddressPolicy IPv4 优先选址;就绪后 confirm 并在发布前 validateReady 复核接口与地址未变)、CarHotspotStatus(sticky 广播兜底 + state 归一化)、WirelessStartupPolicy(15s 就绪期限/轮询间隔/失败枚举)
- 0x4301 下发 listOf(hostAddressText) 单地址、Bonjour 发布同一单地址(沿用 157)
- ManualHotspotManager 构造带 isCancelled(取消响应);MANUAL 启动超时用 HOTSPOT_READY_MILLIS
- WirelessHotspotManager 接口新增 validateReady/connectionDiagnosticSnapshot(PSA),保留 joinedClientCount(Wi-Fi Direct/外部 Wi-Fi 诊断仍用)
就绪门控由 PSA 的 Readiness.await 在 Manager 内完成(替代此前控制器层的失败即报错)。