一个实现比亚迪汽车app自动签到的 AutoX.js 脚本。
  • JavaScript 100%
Find a file
2026-10-19 09:33:32 +08:00
byd_checkin_log.txt feat: 利用autox的定时执行解锁后触发,修改脚本和文档,以及产生debug脚本,签到日志和debug日志 2026-10-18 12:46:27 +08:00
byd_dump.txt feat: 利用autox的定时执行解锁后触发,修改脚本和文档,以及产生debug脚本,签到日志和debug日志 2026-10-18 12:46:27 +08:00
checkin.js feat: 增加自己实现的悬浮窗overlay方案,更新unlock.js增加back逻辑,声明需要后台弹出界面权限 2026-10-19 09:33:32 +08:00
debug_dump.js feat: 利用autox的定时执行解锁后触发,修改脚本和文档,以及产生debug脚本,签到日志和debug日志 2026-10-18 12:46:27 +08:00
overlay_keepalive.js feat: 增加自己实现的悬浮窗overlay方案,更新unlock.js增加back逻辑,声明需要后台弹出界面权限 2026-10-19 09:33:32 +08:00
README.md feat: 增加自己实现的悬浮窗overlay方案,更新unlock.js增加back逻辑,声明需要后台弹出界面权限 2026-10-19 09:33:32 +08:00
schedule.js feat: 实现首版发布 2026-10-17 21:58:51 +08:00
unlock.js feat: 增加自己实现的悬浮窗overlay方案,更新unlock.js增加back逻辑,声明需要后台弹出界面权限 2026-10-19 09:33:32 +08:00
unlock_resident.js feat: 增加自己实现的悬浮窗overlay方案,更新unlock.js增加back逻辑,声明需要后台弹出界面权限 2026-10-19 09:33:32 +08:00
方案探索.md feat: 实现首版发布 2026-10-17 21:58:51 +08:00

比亚迪汽车 App 每日自动签到(AutoX.js)

基于 AutoX.js(Auto.js 社区维护版)的无障碍自动签到,无需 root、无需逆向 App,通过「进 App → 我的 → 点签到」的 UI 自动化实现每日签到。

为什么最终选这个方案(浏览器插件、抓包调 API 等路线为何被否决)见 方案探索.md。

文件

文件 用途
checkin.js 单次签到(手动运行 / 测试用)
unlock.js 推荐:解锁触发版(配合 AutoX 定时任务「屏幕解锁时」触发)
unlock_resident.js 常驻自监听版(备选:脚本自己监听解锁广播,不依赖 AutoX 定时任务)
overlay_keepalive.js 隐形悬浮窗保活:用 1×1 透明 overlay 顶替 AutoX 自带悬浮球,让你能「退出悬浮窗」又不丢后台拉起能力
schedule.js ⚠️ 已弃用,仅供学习参考(见下方说明)

环境

  • Android 手机(无需 root),已装 AutoX.js 6.x(社区版 autox-community/AutoX)
  • 比亚迪汽车 App 已登录(保持登录态,不频繁掉登录)

AutoX 需要的权限

打开 AutoX 左侧汉堡菜单,开启:

  1. 无障碍服务(必开,核心)
  2. 悬浮窗(必开:脚本在后台时靠它才能把比亚迪 App 拉到前台;关掉会导致「界面不跳转、找不到『我的』tab」。它会在系统里显示一个透明悬浮层,属正常现象)
  3. 前台服务(建议开:unlock_resident.js 常驻需要它,也能让 AutoX 更不容易被杀后台)
  4. 音量下键控制(建议开,长按音量下键紧急停止脚本)

⚠️ 关于「后台启动 App」:Android 10+ 限制后台应用启动其它应用。AutoX 能在后台调用 app.launch 把比亚迪 App 切到前台,靠的是**屏幕上存在一个悬浮窗(overlay 窗口)**这个豁免条件(系统里叫「显示在其他应用上层」)。

注意区分两件事:AutoX 汉堡菜单里的「悬浮窗」是权限开关;桌面上那个可点击的透明小球是悬浮窗窗口。只有权限、没有窗口,后台启动依然会被拦。所以如果你在悬浮球里点了「退出悬浮窗」,权限开关还亮着,但窗口没了,app.launch 就会静默失败(日志里 currentPackage 一直停在桌面)。

想关掉那个丑球、又保留后台拉起能力,二选一:

  1. 运行 overlay_keepalive.js(推荐,通用):用一个 1×1 全透明、贴边的隐形悬浮窗顶替 AutoX 自带悬浮球,之后放心点「退出悬浮窗」;
  2. 或授予系统里 AutoX 的「后台弹出界面」权限 = 始终允许(小米/HyperOS 存在这个权限,其他手机的系统未知):设置 → 应用管理 → AutoX.js → 权限管理 → 后台弹出界面 → 始终允许。

使用方法

推荐路线(解锁触发):

  1. 在 AutoX 里新建脚本,粘贴 unlock.js 内容并保存;
  2. 长按该脚本 →「定时任务」→ 选择「特定事件(广播)触发」→「屏幕解锁时」,指向 unlock.js;
  3. 之后每次解锁手机,AutoX 都会自动拉起 unlock.js,由脚本自行判断「时间窗(08:00~24:00)+ 今日是否已完成」,满足才签到并推送,否则静默退出。

单次手动测试:直接运行 checkin.js(或手动运行一次 unlock.js)。

备选路线:若 AutoX 的定时任务触发在你机型上不稳定,改用 unlock_resident.js——直接运行它,脚本自己常驻监听解锁广播,不依赖定时任务(代价是需要前台服务保活)。

两种自动签到方式对比

unlock.js(推荐) schedule.js
触发方式 每天 08:00~24:00 内,解锁手机即触发(由 AutoX 定时任务拉起) 每天固定 08:00 到点触发
适用场景 到点人常在开车/锁屏,但白天会正常解锁手机 手机到点保证亮屏解锁(如放桌面充电常亮)
当天去重 签成功/已签后当天不再重复 到点执行,靠「已签到」检测幂等

unlock.js 的核心思路:借助 AutoX 的「屏幕解锁时」触发,每次解锁都跑一次脚本;脚本内部判断时间窗和当日是否已完成,签成功一次后当天就跳过,之后解锁静默退出、不再打扰你。它天然解决了「固定 08:00 时手机在锁屏」的问题——因为触发时机就是「你解锁手机」这一刻,此时屏幕一定是亮着且已解锁的。解锁后会先等 5 秒(可改 unlock.js 里的 UNLOCK_DELAY_MS)再执行。

关于 schedule.js(已弃用,仅保留代码学习)

schedule.js 是「每天固定 08:00 到点触发」的版本。它的致命问题是:无障碍点击只有在屏幕亮着且已解锁时才能生效,而 08:00 那一刻手机大概率处于锁屏/息屏,脚本根本点不到签到按钮——除非你人为保证到点手机是常亮解锁的(比如夜间充电并开「充电时屏幕不休眠」)。这在实际使用中很难长期稳定,因此不推荐使用。

保留 schedule.js 的代码,可以对照学习两种触发模型(定时 vs 解锁广播)和 ensureAwake()/device.wakeUp() 的写法。

⚠️ 关键限制

无障碍点击只有在屏幕亮着且已解锁时才能生效:

  • unlock.js:触发时机本身就是解锁,天然满足,无需额外处理;
  • schedule.js(固定 08:00):若到点手机锁屏,需任选其一——开发者选项开「充电时屏幕不休眠」夜间充电常亮;或锁屏设为「滑动/无」并取消 schedule.js 里 ensureAwake() 中 device.swipe(...) 的注释;有 PIN/指纹锁则只能保证到点手机已解锁。

保活与开机自启(按机型设置,否则会被杀后台)

无论走「定时任务触发」还是「常驻脚本」,AutoX 本身都必须活着才能收到解锁广播(ACTION_USER_PRESENT 只能动态注册)。小米 / 华为 / 荣耀 / OPPO / vivo 都需要手动设置,否则 AutoX 后台会被清掉:

  1. 把 AutoX 加入自启动白名单;
  2. 电池优化里把 AutoX 设为不限制 / 无限制;
  3. 最近任务里把 AutoX 锁定(下滑卡片锁定图标);
  4. 重启手机后需重新运行 unlock_resident.js 或重新启用定时任务;AutoX 若有「开机自启」开关建议一并打开。

小提示:unlock_resident.js(常驻版)因为挂着前台服务,反而能顺带把 AutoX 保活;unlock.js(定时任务版)没有常驻脚本,保活更依赖上面的系统设置。

日志

脚本每次运行会把结果追加到手机:

/sdcard/Download/byd_checkin_log.txt

电脑上查看:

adb pull /sdcard/Download/byd_checkin_log.txt

推送通知(ntfy)

unlock.js(及备选的 unlock_resident.js)会在每次签到尝试后推送结果到你自建的 ntfy 服务器:

  • 服务器:https://ntfy.940304.xyz
  • 主题(topic):byd_checkin_autox
  • 签到成功 / 已签到:推送一次(优先级 3,绿勾);
  • 签到失败:推送失败原因(优先级 4,红叉),且当天不标记完成,下次解锁会自动重试并再次推送;
  • 一旦当天签到成功,后续解锁走「已签」短路,不再推送。

配置在 unlock.js 顶部(NTFY_SERVER / NTFY_TOPIC)。若你的 topic 设了访问口令,需在 push() 里补充鉴权头。

后续规划

  • 单次签到 checkin.js
  • 解锁触发签到 unlock.js(推荐,当前方案)
  • 固定 08:00 定时签到 schedule.js(已弃用,仅作学习)
  • 签到结果推送(ntfy)