- JavaScript 100%
| byd_checkin_log.txt | ||
| byd_dump.txt | ||
| checkin.js | ||
| debug_dump.js | ||
| overlay_keepalive.js | ||
| README.md | ||
| schedule.js | ||
| unlock.js | ||
| unlock_resident.js | ||
| 方案探索.md | ||
比亚迪汽车 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 左侧汉堡菜单,开启:
- 无障碍服务(必开,核心)
- 悬浮窗(必开:脚本在后台时靠它才能把比亚迪 App 拉到前台;关掉会导致「界面不跳转、找不到『我的』tab」。它会在系统里显示一个透明悬浮层,属正常现象)
- 前台服务(建议开:
unlock_resident.js常驻需要它,也能让 AutoX 更不容易被杀后台) - 音量下键控制(建议开,长按音量下键紧急停止脚本)
⚠️ 关于「后台启动 App」:Android 10+ 限制后台应用启动其它应用。AutoX 能在后台调用
app.launch把比亚迪 App 切到前台,靠的是**屏幕上存在一个悬浮窗(overlay 窗口)**这个豁免条件(系统里叫「显示在其他应用上层」)。注意区分两件事:AutoX 汉堡菜单里的「悬浮窗」是权限开关;桌面上那个可点击的透明小球是悬浮窗窗口。只有权限、没有窗口,后台启动依然会被拦。所以如果你在悬浮球里点了「退出悬浮窗」,权限开关还亮着,但窗口没了,
app.launch就会静默失败(日志里currentPackage一直停在桌面)。想关掉那个丑球、又保留后台拉起能力,二选一:
- 运行
overlay_keepalive.js(推荐,通用):用一个 1×1 全透明、贴边的隐形悬浮窗顶替 AutoX 自带悬浮球,之后放心点「退出悬浮窗」;- 或授予系统里 AutoX 的「后台弹出界面」权限 = 始终允许(小米/HyperOS 存在这个权限,其他手机的系统未知):设置 → 应用管理 → AutoX.js → 权限管理 → 后台弹出界面 → 始终允许。
使用方法
推荐路线(解锁触发):
- 在 AutoX 里新建脚本,粘贴
unlock.js内容并保存; - 长按该脚本 →「定时任务」→ 选择「特定事件(广播)触发」→「屏幕解锁时」,指向
unlock.js; - 之后每次解锁手机,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 后台会被清掉:
- 把 AutoX 加入自启动白名单;
- 电池优化里把 AutoX 设为不限制 / 无限制;
- 最近任务里把 AutoX 锁定(下滑卡片锁定图标);
- 重启手机后需重新运行
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)