基于 Kotlin 开发的 Android 无人值守打卡工具,兼容 Android 8 ~ 16 及 HarmonyOS 4.0,其他OS需要自行测试,理论上能安装就能用,但不保证兼容性,需注意! Android 8以下系统,需修改lite/build.gradle 和 app/build.gradle里面的
minSdk
由于存在倒卖行为,GitHub 不再提供预编译安装包。有编译能力者可自行从源码构建; 否则请加入 QQ 群获取安装包。
| 序号 | 说明 |
|---|---|
| 1 | 将一部备用手机置于公司工位,设置上下班打卡时间即可实现定时自动打卡。 |
| 2 | 兼容 Android 8.0 ~ 16.0 以及 HarmonyOS 4.0;小米澎湃系统请自行测试。 |
| 3 | 本项目原为个人自用工具,因换工作后不再使用,故选择开源,欢迎提 Issue 或 PR。 |
| 4 | 无人值守方案:不修改任何签到软件的内部逻辑,也不修改手机 GPS 位置。 |
| 5 | 欢迎通过 PR 贡献代码,或通过 QQ 群反馈功能建议。 |
| 序号 | 说明 |
|---|---|
| 1 | 手机不可灭屏(手机开发者模式下,打开充电不息屏):灭屏状态下前台通知服务可能被系统回收,导致无法正常打卡。部分手机锁屏后再解锁不会直接进入桌面,同样会影响打卡。 |
| 2 | 整机关机 / 重启后不会自动恢复:软件不依赖开机广播自启,重启后需手动打开一次 DailyTask 才会恢复调度与监听。 |
| 3 | 按音量 减小键 可开启伪装灭屏模式(不影响打卡),再次按下退出;也可通过上下滑动屏幕手势切换。 |
| 4 | 默认每日执行打卡任务,可通过 DT#关闭循环 指令远程暂停(需大号给小号发送指令,支持 QQ / 微信 / 支付宝 / TIM)。 |
| 5 | 远程指令与定时任务共用同一台设备:两者同时发生时按「先到先执行」串行排队,不会互相抢占,但排在后面的一方会被延后执行。 |
| 6 | 正式使用前建议先测试几天,确认稳定后再投入实际使用。 |
2.4.3.0 — 2026年10月26日
完整变更请查看 版本更新日志 (CHANGELOG)
曾有人无端质疑本项目会窃取隐私、盗取数据。以下为相关聊天记录的截图,借此澄清:

如果哪天这个项目停止维护了,大概就是因为这种人多了。各自珍重。
前提:目标打卡应用必须支持极速打卡,且已开启该功能。
DailyTask,应用会自动检测悬浮窗权限,授权即可。DailyTask,开启通知权限。DailyTask 设置中选择结果来源:通知监听(仅适用于钉钉)截屏服务(理论上适用于任何打卡应用)DT#打卡 指令回传截图时,开启设置页的「返回截图」开关(需先开启截屏服务)。企业微信
webhook 地址 并保存。webhook 地址 末尾的 key 值填入 DailyTask 的企业微信渠道配置中。企业微信与邮箱渠道均需先测试发送成功才会保存,可避免写入无效配置。
QQ 邮箱
DT#状态查询 确认通知监听、截图服务、消息渠道均处于正常状态。仓库不再提供预编译安装包,可按以下步骤自行构建。
| 环境 | 要求 |
|---|---|
| JDK | 17(Gradle toolchain 指定,命令行 JDK 需可用) |
| Gradle | 随仓库提供的 gradlew / gradlew.bat(Gradle 8.13) |
| NDK | 21.4.7075529(ndkVersion 指定) |
| CMake | 3.22.1(项目含 native 模块) |
| Android SDK | compileSdk / targetSdk 均为 36 |
# Windows
gradlew.bat :app:assembleRelease
# macOS / Linux
./gradlew :app:assembleRelease
app/build/outputs/apk/release/DT_<构建日期>_<版本号>.apk,例如 DT_20261026_2.4.3.0.apkapp/DailyTask.jks,签名配置在 app/build.gradle 的
signingConfigs.releaseversionCode / versionName 维护自行修改
versionCode/versionName后,务必同步更新本 README 的「最新版本」与 CHANGELOG。
默认每日自动打卡,无需额外操作。以下指令用于远程控制任务执行。
指令格式:所有远程指令必须以固定前缀
DT#开头(例如DT#执行任务),否则会被当作普通聊天消息忽略,避免日常对话误触发。建议使用小号发送指令,避免与大号日常聊天互相干扰。
| 序号 | 指令 | 功能 | 邮件通知 |
|---|---|---|---|
| 1 | DT#执行任务 |
启动循环任务(默认每天自动执行) | 否 |
| 2 | DT#终止任务 |
停止循环任务(仅停止当天) | 否 |
| 3 | DT#开启循环 |
开启循环标志位 | 是 |
| 4 | DT#关闭循环 |
关闭循环标志位(永久暂停,直到收到指令 3) | 是 |
| 5 | DT#息屏 |
开启伪装灭屏模式 | 否 |
| 6 | DT#亮屏 |
退出伪装灭屏模式 | 否 |
| 7 | DT#考勤记录 |
导出当天考勤记录 | 是 |
| 8 | DT#打卡 |
触发一次打卡(默认指令文案为「打卡」) | 否 |
| 9 | DT#状态查询 |
查询当前状态(任务、服务、监听、电量、版本、日期等) | 是 |
| 10 | DT#截屏 |
截取目标应用屏幕并通过消息渠道返回 | 是 |
DT#打卡 执行期间定时任务正在等待打卡结果,定时任务会提示「未监听到打卡成功」——这是正常现象,
因为打卡已由该指令完成,请以指令回执与截图结果为准。DT#打卡 倒计时结束会截屏并发送结果。默认模式(每日自动打卡):
graph LR
A[每日到点] --> B[拉起目标应用]
B --> C{打卡成功?}
C -->|是| D[发送打卡结果]
C -->|否| E[超时兜底截屏]
D --> F[等待次日重置]
E --> F
F --> A
循环控制模式(通过指令 1、3、4 控制任务日期):
graph LR
A[每日到点] --> B{循环任务已开启?}
B -->|是| C[执行当日任务]
B -->|否| D[跳过,等待下次开启]
C --> E[等待次日重置]
D --> E
E --> A
F[DT#开启循环 / DT#关闭循环] -.-> B

| 结果 | 说明 |
|---|---|
| 成功 | ![]() |
| 失败 | 可能原因: 1. 账号被另一台设备挤下线 2. 未设置极速打卡 3. 应用打卡通知或手机通知被关闭 4. 当前设备登录了两个以上账号 |
关于「未监听到打卡成功」:使用
DT#打卡指令代打卡后,定时任务会提示未监听到打卡成功,这属于正常现象 (打卡已由指令完成);其余情况请按上表排查。
| 序号 | 原因 | 风险等级 |
|---|---|---|
| 1 | 手机已 Root | 极高 |
| 2 | 使用模拟定位软件修改打卡位置 | 极高 |
| 3 | 使用向日葵等远程控制软件 | 极高 |
| 4 | 使用 ADB 命令模拟手指点击打卡 | 极高 |
| 5 | 开启了无障碍服务 | 中等 |
| 6 | 手机通过数据线连接电脑 | 中等 |
| 现象 | 说明与处理 |
|---|---|
| 手机重启后不再自动打卡 | 软件不监听开机广播,重启后需手动打开一次 DailyTask |
| 定时任务提示「未监听到打卡成功」,但实际已打卡 | 多为刚执行过 DT#打卡 指令,属正常现象,以指令回执为准 |
| 指令回执提示「设备正被占用将排队等待」 | 定时任务正在操作设备,指令会排队等待并在完成时附上实际等待时长 |
| 打卡结果一直收不到 | 先用 DT#状态查询 检查通知监听、截图服务、消息渠道状态,再看应用内日志 |
| 群号 | 容量 | 备注 |
|---|---|---|
| 560354109 | 200 人 | ①群 |
| 643595483 | 500 人 | ②群 |
| 377923252 | 500 人 | ③群 |
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|