目录

这套方案让红米 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. 动作语义是「切换」:小组件车锁按钮点一次就在解锁与上锁之间翻转,脚本不读车况、也不判断方向。所以点之前先想清楚当前是锁还是开。
  2. 联调完要确认车锁回:看小组件图标——黑色闭合锁 = 已锁,绿色开锁 = 已解锁。远程解锁后若无人开门,车会自己回锁,但仍需人工确认最终状态。
  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 重装手表端后必做(顺序不能乱)

⚠️ 只要重装过手表应用或换了手表,以下三步必须全部重做一遍,少做一样就会出现「手表点了没反应」或「锁屏划不开」。

  1. 先装好手表端 RPK,然后打开手机 Companion,等通知栏出现「小鹏解锁 · 桥接服务运行中…」。
  2. 重新配对:打开「小米运动健康」→ 设备 → 删掉旧的手表记录 → 重新配对(在手表上确认配对码)。
  3. 重新加蓝牙解锁:手机「设置 → 锁屏 → 蓝牙设备解锁」→ 把这块手表重新添加进去,并确认开关是开的。

原因:手表应用重装后,小米互联认的节点会变;锁屏的蓝牙解锁绑的是设备地址,重新配对后这项授权会失效。 手机端只是覆盖升级(同签名)时一般不用重做这三步;只有手表端重装或换表才需要。

2.3 装手机端 APK

  1. 安装 APK(adb install -r 或直接点击安装)。
  2. 打开 App,确认通知栏有常驻的「小鹏解锁 · …」。
  3. 点「保活设置」:忽略电池优化 + 允许自启动。

2.4 装手表端 RPK

把 RPK 传到手机,用 AstroBox 安装。装完回到 §2.2 把配对和蓝牙解锁补上。

2.5 部署 AutoJs 脚本

  1. 把脚本覆盖到手机 /sdcard/Download/UURemote/HIGER/higer1_lockproof_v2.js。
  2. 文件名不要改,只覆盖内容——广播触发器 com.higer.xpeng.unlock 已绑定这个路径。
  3. 为防触发器绑的是另一个名字,可同时保留一份同内容的 higer1_car_lock_2.0.0.js 作为兜底。
  4. 在 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 锁屏划不开

  1. 先看脚本日志里有没有 unlock: 点锁屏 '解锁'。没有说明没找到锁屏上的文字元素——不同机型锁屏文案不同(「解锁」「开锁」「上滑解锁」「滑动解锁」),按实际文案调整匹配词。
  2. 检查手机「设置 → 锁屏 → 蓝牙设备解锁」里这块手表是否还挂着。重新配对过就必须重新添加。
  3. 若锁屏设了密码且没开蓝牙设备解锁,需要在脚本里配好 PIN 走数字键盘。
  4. 不要用滑动手势去划锁屏:HyperOS 锁屏上无障碍滑动注入不进去,脚本靠"点解锁文字"让锁消失,这是实测结论。

4.3 手表点按钮没反应

  1. 看 App 日志有没有 收到手表消息[…]。没有就查小米运动健康配对是否已重做、互联权限是否已申请。
  2. 装新包或进程重启后若日志出现 you have registered,说明小米互联仍认为旧监听在册:先移除监听再重新注册,脚本内已做退避重试,等一会儿再试。
  3. 用表盘「同步」按钮测试:能取到上一次结果说明互联通道是通的,问题在脚本侧;取不到说明消息根本没到手机。

4.4 车没动但日志显示点了

看日志里 点 id/ic_widget_1 @x,y 的 x 是否小于屏宽。小米桌面把多页横向并排,无障碍给出的坐标可能是跨页的大值(如 1853 而屏宽只有 1200),点下去等于点在屏幕外。处理:把桌面翻到小组件所在页,让脚本先校验坐标在屏内再点;脚本会记住小组件位置,之后大多数情况无需翻页。

4.5 表盘一直「状态未知」

  1. 看 App 日志有没有 状态端口收到:。有说明回传通道通,问题在表盘刷新;没有就是脚本回传失败。
  2. 查脚本日志里的 HTTP_ERR= 行。常见两个原因:
    • 回传请求被发成了表单编码而不是 JSON —— 服务端已兼容两种格式,若仍是旧版服务端请升级。
    • 请求体含中文时按字符数读取会读不够,导致不回响应 —— 现版本按字节读取,升级即可。
  3. 脚本日志在手机 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,不要靠包名猜。
  • 小组件坐标要校验在屏内,跨页大坐标点了无效。
  • 保活两项不做,后台被杀就是「点了没反应」。
  • 联调/测试结束务必确认车已锁回(黑色闭合锁图标)。
  • 签名证书只留本地,绝不上传公开位置。