小鹏手表解锁 · 操作手册
这套方案让红米 Watch 5 上的一个小应用,通过小米互联把指令发给手机;手机收到后唤起 AutoJs6 脚本,自动划开锁屏、回桌面、点小鹏桌面小组件上的「车锁」按钮,并把结果回传到表盘。全程约 5 秒,不需要打开小鹏 App。
按 1 准备 → 2 安装配置 → 3 使用 → 4 排障 的顺序做一遍即可。⚠️ 车锁按钮点一次就是一次真实的锁车/解锁翻转,联调时务必确认最终把车锁回去。
先认几个名词
| 名词 | 是什么 |
|---|---|
| 桥接服务 | 手机上一个常驻后台服务,负责接收手表消息、触发脚本、回传状态 |
| AutoJs6 | 手机上的自动化工具,负责"点亮屏幕 → 划开锁屏 → 点小组件"这套动作 |
| RPK | 手表端快应用的安装包,用 AstroBox 安装 |
| 蓝牙设备解锁 | 手机系统里的一项授权,允许配对的手表在锁屏状态下解锁手机 |
| 小组件车锁 | 小鹏 App 放在桌面上的小组件按钮,点一下在「解锁 ↔ 上锁」之间切换 |
1. 开始怎么准备
1.1 需要备齐的东西
| 项目 | 要求与说明 |
|---|---|
| 手表 | 红米 Watch 5(其他 Vela 快应用机型未验证) |
| 手机 | HyperOS / MIUI,能装 AutoJs6 与手表 Companion App |
| 车 | 小鹏,桌面已放好小鹏小组件的「车锁」按钮 |
| 成品包 | 手机端 APK、手表端 RPK、AutoJs 脚本(三样版本必须一致,见 §1.2) |
| 电脑 | 仅装包/传文件时需要,装 adb 或通过文件传输把 RPK 送到手机 |
| 工具 | AstroBox(装手表 RPK)、AutoJs6(跑脚本) |
1.2 版本必须一致
手机 APK、手表 RPK、AutoJs 脚本三者的版本号要一致,表盘页脚和 App 标题栏都会显示版本号,装错包一眼能看出来。以发布包里的 VERSION 文件为准,本文对应 v2.1.1。
若你手上是源码而非成品包:先用
python tools/sync-version.py --check核对五处版本一致,再用bash tools/build-all.sh出包到dist/v<版本号>/。这一步是开发者流程,普通使用者直接拿成品包即可。
1.3 动手前必读的 4 条
- 动作语义是「切换」:小组件车锁按钮点一次就在解锁与上锁之间翻转,脚本不读车况、也不判断方向。所以点之前先想清楚当前是锁还是开。
- 联调完要确认车锁回:看小组件图标——黑色闭合锁 = 已锁,绿色开锁 = 已解锁。远程解锁后若无人开门,车会自己回锁,但仍需人工确认最终状态。
- 签名证书绝不外传:打包用的自签名证书只留在本地,不要上传到任何公开位置。手机端覆盖升级要求同签名。
- 服务要保活:装完必须做「忽略电池优化 + 允许自启动」,否则后台被系统杀掉,手表点了没反应。
1.4 整条链路(理解了这个,排障就知道查哪一段)
手表点按钮
↓ 小米互联消息
手机 Companion 收到 → 回 ack → 发广播触发脚本
↓
AutoJs6:划开锁屏 → 回桌面 → 点小组件车锁按钮
↓ 本机回环 HTTP / 广播
手机把结果推回手表 → 表盘显示「上次操作」任一段断了都会表现为「点了没反应」。排查时按 §4 的症状表分段验证。
2. 后面怎么配置
2.1 步骤总览
| 步骤 | 动作与验证 |
|---|---|
| 1 | 装手机端 APK、确认通知栏常驻「小鹏解锁 · 桥接服务运行中…」 |
| 2 | 装手表端 RPK(AstroBox) |
| 3 | 重新配对 + 重新加蓝牙设备解锁(§2.2,顺序不能乱) |
| 4 | 部署 AutoJs 脚本到约定路径,绑定广播触发器 |
| 5 | 做保活设置(忽略电池优化 + 自启动) |
| 6 | 抬腕点一次,确认表盘显示「上次操作」 |
2.2 重装手表端后必做(顺序不能乱)
⚠️ 只要重装过手表应用或换了手表,以下三步必须全部重做一遍,少做一样就会出现「手表点了没反应」或「锁屏划不开」。
- 先装好手表端 RPK,然后打开手机 Companion,等通知栏出现「小鹏解锁 · 桥接服务运行中…」。
- 重新配对:打开「小米运动健康」→ 设备 → 删掉旧的手表记录 → 重新配对(在手表上确认配对码)。
- 重新加蓝牙解锁:手机「设置 → 锁屏 → 蓝牙设备解锁」→ 把这块手表重新添加进去,并确认开关是开的。
原因:手表应用重装后,小米互联认的节点会变;锁屏的蓝牙解锁绑的是设备地址,重新配对后这项授权会失效。 手机端只是覆盖升级(同签名)时一般不用重做这三步;只有手表端重装或换表才需要。
2.3 装手机端 APK
- 安装 APK(
adb install -r或直接点击安装)。 - 打开 App,确认通知栏有常驻的「小鹏解锁 · …」。
- 点「保活设置」:忽略电池优化 + 允许自启动。
2.4 装手表端 RPK
把 RPK 传到手机,用 AstroBox 安装。装完回到 §2.2 把配对和蓝牙解锁补上。
2.5 部署 AutoJs 脚本
- 把脚本覆盖到手机
/sdcard/Download/UURemote/HIGER/higer1_lockproof_v2.js。 - 文件名不要改,只覆盖内容——广播触发器
com.higer.xpeng.unlock已绑定这个路径。 - 为防触发器绑的是另一个名字,可同时保留一份同内容的
higer1_car_lock_2.0.0.js作为兜底。 - 在 AutoJs6 里确认无障碍权限已开启,脚本能被广播唤起。
2.6 配置完成检查清单
- 通知栏常驻「桥接服务运行中…」
- 保活两项都开了(忽略电池优化、自启动)
- 小米运动健康里手表是新配对的那条记录
- 「设置 → 锁屏 → 蓝牙设备解锁」里这块手表已添加且开关打开
- AutoJs6 无障碍已开启,脚本在约定路径且文件名正确
- 桌面小组件的车锁按钮存在,且能手动点一次
- 抬腕点一次,表盘显示「上次操作:已切换车锁」
最后一条通过才算整条链路通了。
3. 后面怎么使用
3.1 日常操作
抬腕 → 在表盘点一下按钮 → 等约 5 秒 → 看表盘结果。手机会自动亮屏、划开锁屏、回桌面、点小组件,不用掏手机。
手机上锁屏与否都能用:锁屏状态下脚本会先划开再动作。
3.2 表盘显示含义
| 显示 | 意味着 |
|---|---|
| 上次操作:已切换车锁 · N 分钟前 | 上一次执行成功 |
| 上次没执行成功 | 脚本没跑完(锁屏没划开、没找到小组件等),回报 fail |
| 状态未知 | 手机没收到脚本回传,看 §4 排障 |
3.3 只取结果、不动作
表盘点「同步」只取上一次的执行结果显示,不会亮屏、不会动车。想确认状态而不想触发锁车时用这个。
3.4 使用要点
- 切换语义:点一次翻转一次,不要连点。想解锁变上锁,再点一次即可。
- 脚本不读车况,表盘的
locked恒为「未知」是设计如此,不是故障;用done/fail判断有没有执行。 - 小组件按钮点下去直接执行,不会弹「解锁启动 / 仅解锁」;兜底路径也固定点「仅解锁」,不会误启动车辆。
- 服务被系统杀掉时,5 分钟看门狗会兜底拉起;若长期不生效,回去检查保活两项。
4. 出了故障怎么弄
4.1 先按症状定位
| 症状 | 先看 |
|---|---|
| 重装手表端后完全没反应 | §2.2:重新配对 + 重新加蓝牙设备解锁,漏一步就废 |
| 锁屏下没反应 | §4.2:查「解锁」文字是否找到、蓝牙设备解锁是否还挂着这块表 |
| 手表点按钮没反应 | §4.3:查 App 有没有收到手表消息、互联权限与配对 |
| 车没动但日志显示点了 | §4.4:查点击坐标是否超出屏宽(翻页没到位) |
| 表盘一直「状态未知」 | §4.5:查回环状态端口有没有收到数据 |
| 服务被系统杀掉 | 保活没做完(忽略电池优化 + 自启动),看门狗会兜底拉起 |
| 解锁后又自己锁上 | 车的保护逻辑:远程解锁后无人开门自动回锁,属正常 |
4.2 锁屏划不开
- 先看脚本日志里有没有
unlock: 点锁屏 '解锁'。没有说明没找到锁屏上的文字元素——不同机型锁屏文案不同(「解锁」「开锁」「上滑解锁」「滑动解锁」),按实际文案调整匹配词。 - 检查手机「设置 → 锁屏 → 蓝牙设备解锁」里这块手表是否还挂着。重新配对过就必须重新添加。
- 若锁屏设了密码且没开蓝牙设备解锁,需要在脚本里配好 PIN 走数字键盘。
- 不要用滑动手势去划锁屏:HyperOS 锁屏上无障碍滑动注入不进去,脚本靠"点解锁文字"让锁消失,这是实测结论。
4.3 手表点按钮没反应
- 看 App 日志有没有
收到手表消息[…]。没有就查小米运动健康配对是否已重做、互联权限是否已申请。 - 装新包或进程重启后若日志出现
you have registered,说明小米互联仍认为旧监听在册:先移除监听再重新注册,脚本内已做退避重试,等一会儿再试。 - 用表盘「同步」按钮测试:能取到上一次结果说明互联通道是通的,问题在脚本侧;取不到说明消息根本没到手机。
4.4 车没动但日志显示点了
看日志里 点 id/ic_widget_1 @x,y 的 x 是否小于屏宽。小米桌面把多页横向并排,无障碍给出的坐标可能是跨页的大值(如 1853 而屏宽只有 1200),点下去等于点在屏幕外。处理:把桌面翻到小组件所在页,让脚本先校验坐标在屏内再点;脚本会记住小组件位置,之后大多数情况无需翻页。
4.5 表盘一直「状态未知」
- 看 App 日志有没有
状态端口收到:。有说明回传通道通,问题在表盘刷新;没有就是脚本回传失败。 - 查脚本日志里的
HTTP_ERR=行。常见两个原因:- 回传请求被发成了表单编码而不是 JSON —— 服务端已兼容两种格式,若仍是旧版服务端请升级。
- 请求体含中文时按字符数读取会读不够,导致不回响应 —— 现版本按字节读取,升级即可。
- 脚本日志在手机
Download/higer_unlock.log,状态快照在Download/higer_state.json,App 日志区带「脚本│」前缀的是脚本回传内容。
4.6 诊断信息在哪看
| 位置 | 用途 |
|---|---|
| App 日志区 | 有没有收到手表消息、状态端口有没有收到数据、脚本回传日志(「脚本│」前缀) |
Download/higer_unlock.log | 脚本每一步动作:划锁屏、找小组件、点击坐标、HTTP 结果 |
Download/higer_state.json | 上一次执行结果快照 |
| AutoJs6 日志 | 脚本本身报错、无障碍是否生效 |
反馈问题时附上:发生时间、三样成品的版本号、手机/手表型号、表盘显示内容、相关日志片段。公开反馈前记得检查日志里的个人路径和设备标识。
4.7 已知硬约束与避坑
- 锁屏必须有办法划开;没开「蓝牙设备解锁」且设了密码时,需要在脚本里配 PIN。
- 桌面小组件必须在某一页上存在;被删掉会退化到「进 App 点车锁磁贴」的兜底路径。
- 重装手表端 → 重新配对 + 重新加蓝牙设备解锁,两步缺一不可,这是头号坑。
- HyperOS 锁屏靠「点解锁文字」而非滑动;判断是否在锁屏用系统 API,不要靠包名猜。
- 小组件坐标要校验在屏内,跨页大坐标点了无效。
- 保活两项不做,后台被杀就是「点了没反应」。
- 联调/测试结束务必确认车已锁回(黑色闭合锁图标)。
- 签名证书只留本地,绝不上传公开位置。