一个 LSPosed 模块,给 HyperOS「安全服务」里的自动任务补了几个原生没有的功能。
- 目标版本:安全服务 12.2.2-12.3.2之间的包、12.8.6、13.5.9 与 13.6.0,包名
com.miui.securitycenter - 模块包名:
io.github.codecodegogogo.HyperosAutoTaskPlus - 当前版本:1.13.0,新增「应用使用时长」条件,可设置统计范围与范围内累计使用时长
- 「添加再执行」始终位于已有内容和设置项下方,连续添加或删除分组、展开退出条件都不会把入口夹在内容中间
- 没有独立界面,功能入口在安全服务的「自动任务」中;安装后按下面的作用域说明启用并重启手机
在 LSPosed 中启用「Hyper自动任务增强」,进入本模块的作用域列表,按使用的功能勾选:
| 应用 / 作用域 | 包名 | 何时需要勾选 |
|---|---|---|
| 安全服务 | com.miui.securitycenter |
所有功能都必须勾选,自动任务的选项、编辑和执行在这里接入 |
| 系统界面(SystemUI) | com.android.systemui |
使用 解锁失败次数 及其配套的 成功解锁时 退出条件时额外勾选 |
| 系统桌面 | com.miui.home |
当前没有需要勾选桌面的功能,也没有向桌面注入的代码 |
| Android 系统 / 系统框架 | android |
当前不需要勾选 |
| 任务中选择的其它应用 | 对应应用包名 | 冷启动、杀死应用等条件不需要把目标应用加入作用域 |
系统界面和系统桌面是两个不同的应用。 解锁失败事件来自系统界面的锁屏认证流程,
需要勾选的是 com.android.systemui。修改作用域或更新模块后重启手机,使对应进程重新加载模块。
| 自动任务选项 / 功能 | 安全服务 | 额外需要系统界面 |
|---|---|---|
| 「启动 / 离开应用」条件搭配「打开应用」结果 | 必须 | 否 |
| 冷启动应用、杀死应用 | 必须 | 否 |
| 应用使用时长:统计范围、范围内累计时长 | 必须 | 否 |
| 隐身模式 | 必须 | 否 |
| 屏幕状态:亮屏时间、息屏时间 | 必须 | 否 |
| 退出条件的添加、修改、删除与勾选 | 必须 | 按选中的具体条件决定;编辑功能本身不需要 |
| 时间间隔 | 必须 | 否 |
| 设备动作:翻转、摇晃;光线阈值 | 必须 | 否 |
| 到达地理围栏、离开地理围栏 | 必须 | 否 |
| 录音、录屏、截图、拍照 | 必须 | 否 |
| 打电话、发送短信(正文、当前位置) | 必须 | 否 |
| 发送邮件(正文、当前位置、环境照片) | 必须 | 否 |
| 播放音频、发出通知及文件保存通知 | 必须 | 否 |
| 动作链(录制、编辑、回放触摸动作) | 必须 | 否 |
| 再执行(多组延迟、逐组可删,复用所有执行项目) | 必须 | 否 |
| 解锁失败次数(PIN、密码、图案、指纹、人脸合并统计) | 必须 | 是 |
| 成功解锁时(解锁失败次数对应的退出条件) | 必须 | 是 |
例如「解锁失败 3 次 → 发送带环境照片的邮件」需要同时勾选安全服务和系统界面, 额外作用域来自解锁失败条件;「时间间隔 → 发送邮件」只需要安全服务,无需系统桌面。 仅勾选安全服务也能看到解锁失败选项,但缺少 SystemUI 的事件采集,无法正常更新失败次数和成功解锁状态。
截图、录屏和悬浮通知虽然调用系统服务或由系统显示,仍在安全服务中发起,不因此增加 SystemUI 作用域要求。 作用域只决定模块注入哪些进程;定位、相机、录音、短信、通知等访问权限,以及邮件所需的网络和 SMTP 设置仍需分别满足。 以上对应关系依据当前 模块入口 和 推荐作用域 核对。
原生:条件选了「启动应用」或「离开应用」后,结果列表里的「打开应用」会被置灰。 现在:不再置灰,可以做“打开 A 时自动打开 B”这类任务。
在「添加条件 → 事件」里,紧跟在原生「启动应用 / 离开应用」之后。
- 冷启动应用:应用进程从无到有(被加载进内存)时触发
- 杀死应用:应用的所有进程都被清出内存时触发
和原生「启动 / 离开应用」的区别:原生看的是前后台切换,这两个看的是进程是否存在。 支持多选应用,支持「退出时恢复」(两者互为退出条件)。
在「添加结果 → 设置项」里,紧跟在「定位」之后,可选「开启」或「关闭」。
隐身模式是系统权限中心里那个开关(开启后所有应用无法录音、定位、拍照),系统只在设置页给了开关, 没有快捷入口。现在可以在自动任务里自动开关它,勾选「退出时恢复」会在任务退出时切回相反状态。
在「添加条件 → 事件」里,紧跟在「锁屏」之后。界面和「电量」条件一样是两张卡片:
- 亮屏时间:屏幕持续点亮了指定时长后触发
- 息屏时间:屏幕持续熄灭了指定时长后触发
时长在输入框里填数字,单位可选秒 / 分钟 / 小时 / 天,填 0 表示一进入该状态就触发。 勾选「退出时恢复」时,退出条件是相反的状态(例如「息屏 10 分钟」的退出条件是「亮屏时」)。
原生:勾选「退出时恢复」后,退出条件只能是每个触发条件的反向条件(自动生成、不能改、不能删)。 现在退出条件列表和触发条件列表一样可以操作:
- 列表末尾有「添加条件」,可以额外加任意条件作为退出条件(自定义时间除外)
- 点已有的退出条件可以修改,右侧有删除按钮,自动生成的那条也能删掉换成别的
- 有多条时每条前面有勾选框,勾选的才生效
- 选择「自定义时间 → 时间段」后,会自动出现「时间段结束时」退出条件,显示对应结束时间;可以删除,存在多条退出条件时也可以取消勾选
删除「时间段结束时」后,原来的时间触发范围不变,但任务不会再因到达结束时间自动退出, 而是由剩余勾选的退出条件决定何时恢复。保存、重新打开或安全服务重启后,已删除的时间退出条件不会自动补回。 修改上方时间段会同步现有退出项的结束时间,不会重新添加已删除的退出项。 移除时间触发条件后重新添加时间段,会生成新的时间退出项;单个时间点没有结束时间,不生成此项。 旧时间段任务首次打开时会补出这条原本隐含的退出规则,未编辑的旧任务保持原有行为。
触发条件之间是「与」(全部满足才执行),退出条件之间是「或」(勾选的任一满足就恢复),和原生一致。
在「添加条件 → 情境」里,可设置每隔多少秒 / 分钟 / 小时 / 天触发。 时间间隔没有反向状态,也不能添加为退出条件。
新增「传感器」分类,包含设备动作(翻转 / 摇晃)和光线阈值。 仅在有启用的对应任务时监听传感器;光线条件可生成相反方向的退出条件。
在原生「离开某地」之后新增「到达地理围栏 / 离开地理围栏」。复用原生地址选择和围栏判断, 半径可在 50~50000 米之间设置,默认 500 米。设备没有原生地图选点能力时不显示。
作用域:安全服务。 以下结果本身均无需额外勾选系统界面或系统桌面;与其它条件组合时,按条件补齐作用域。
在「添加结果 → 功能」末尾新增以下操作,添加后可以在任务编辑页再次修改:
| 结果 | 配置与行为 |
|---|---|
| 录音 | 开始 / 停止,用麦克风录制为 M4A |
| 录屏 | 开始 / 停止,录制屏幕画面为 MP4,当前不包含音轨 |
| 截图 | 无声获取当前屏幕,保存为 PNG 到 Pictures/Screenshots,通知可查看文件 |
| 拍照 | 前置 / 后置摄像头可多选,各拍一张 JPEG;同时选择时先后置、再前置 |
| 打电话 | 手动输入一个电话号码,触发时直接拨号;SIM 卡沿用系统拨号设置 |
| 发送短信(1.9.1 调整) | 输入号码和补充正文,可勾选当前位置;仅发送普通短信,全部分段成功后检查并保存本机已发记录 |
| 发送邮件(1.9.0) | 配置 SMTP、发件 / 收件邮箱和授权码,填写主题与补充正文,可独立勾选当前位置、环境照片 |
| 播放音频(1.5.0) | 调用系统文件管理选择本地音频,任务触发时按媒体音量播放一次 |
| 发出通知(1.6.0) | 自定义一段文字,支持换行,触发时显示系统标准通知,长文本可展开 |
录音保存在 Music/HyperosAutoTaskPlus,录屏和照片保存在 DCIM/HyperAutoTask,完成后通过
MediaStore 发布,文件管理器 / 相册可以找到。失败的媒体文件会清理,不留下可见的半成品。
录音、录屏运行时显示持续通知,点按通知即可停止并保存。同一种录制同时只保留一个会话: 重复启动不会重置文件,其他任务也不会抢走录制归属。显式「停止」结果可停止本模块当前的对应录制; 「退出时恢复」则只停止该任务自己启动的录制。停止操作不会反向开启,截图、拍照、电话、短信、邮件、通知恢复时不执行。
从 1.7.0 起,录音、录屏和拍照保存完成后会显示系统标准的「已保存」通知,附带 查看文件 按钮。 点按钮或通知正文即可通过系统选择的播放器 / 图片查看器打开对应文件;展开通知可看到文件名和保存目录。 每个文件独立关联通知,前后摄像头同时拍摄时分别显示。停止录制后移除的是正在录制通知,已保存通知可以保留或手动清除。 通知使用安全服务下的「自动任务保存的文件」类别;关闭该类别只影响完成通知,已经保存的文件不受影响。
从 1.8.1 起,截图通过安全服务已有的系统截屏接口直接获取画面,以 PNG 保存到 Pictures/Screenshots,
不触发系统截图广播及其提示音。保存后继续显示无声的「截图已保存」通知,附带 查看文件 按钮。
通知直接关联本次保存的文件,不再轮询媒体库猜测归属,也不会影响同时手动截图或正在进行的录屏 / 投屏。
系统接口不可用或没有返回画面时明确提示失败,不退回有声截图;受保护画面仍受系统截屏规则限制。
录屏使用安全服务已有系统权限创建独立 MediaProjection,会避让正在进行的系统录屏或投屏, 不会停止其它应用的录制。录屏尺寸按启动时的方向确定,长边最多 1920 像素,录制中不动态切换方向。 从 1.8.1 起,前后置拍照先关闭本次相机会话的快门音,不修改手机音量;1.9.0 的邮件环境照片沿用这一方式。 系统拒绝关闭快门音时取消拍照并提示,不回退到有声拍摄。相机被占用或所选摄像头不存在时会报错;多选时一个摄像头失败仍会尝试另一个。 旧版任务的前置 / 后置单选设置会保留,编辑时可以改为多选。 拍照、截图的结果图标与录屏保持一致,包含正常、禁用和半透明三种状态。 从 1.8.2 起,录音结果改用原生「调节音量」图标,同样包含三种状态。
「播放音频」通过 Android 系统文件选择器选取文件,并申请持久读取授权,任务保存后、安全服务 重启后仍可使用同一文件。取消选择不会覆盖原配置;文件被删除或访问授权被撤回时会提示播放失败。 选择期间如果编辑页被系统重建,会提示重新选择,避免把结果写回失效的草稿。 系统解码器支持 MP3、AAC/M4A、WAV、FLAC、OGG/Opus、AMR 等常见格式,具体编码兼容性以设备为准。 默认不循环、不修改媒体音量;播放完毕自动释放资源,通知栏可点按停止。 本模块同一时间播放一段音频,新播放替换上一段;「退出时恢复」仅停止本任务的播放。 收到音频焦点中断(例如来电)时停止播放;系统要求降低音量时暂时降低播放器音量。
「发出通知」填写正文后保存,标题为「自动任务」,使用系统标准通知及大文本展开样式,可在通知栏手动清除。 通知归属安全服务,使用独立的「自动任务通知」类别,声音等提醒效果遵循系统通知设置。 同一任务再次触发会更新自己的通知,不同任务分别显示;任务退出时不重复发送,也不撤回已发出的通知。 内容不能全为空白,取消编辑保留原内容;安全服务或该通知类别被关闭时会提示开启。
从 1.7.1 起,本模块的所有系统通知都默认使用高重要级别(IMPORTANCE_HIGH):自定义通知、
正在录音 / 录屏、正在播放音频,以及录音 / 录屏 / 拍照 / 截图保存完成通知。
更新并重启后首次触发对应通知时会使用固定的新渠道 ID,解决旧渠道已经保存为普通 / 低重要级别的问题。
旧渠道保留,避免删除仍在通知栏中的文件通知;新的渠道不会每次执行都重建成不同 ID,后续系统设置会保留。
高重要级别允许系统显示悬浮横幅,是否实际弹出还取决于安全服务的「悬浮通知」、对应类别设置及勿扰模式。
从 1.8.0 起还为通知添加 MIUI / HyperOS 的悬浮提示标志;系统不提供扩展接口时仍发送标准高优先级通知。
截图、拍照等文件已保存但通知被关闭时,会提示开启安全服务及「自动任务保存的文件」类别的通知。
如更新后仍无横幅,可长按对应通知进入类别设置,检查重要程度及悬浮通知;无需开启应用悬浮窗权限。
1.8.1 为照片、截图及其它媒体保存通知启用固定的新无声渠道,保留高重要级别和悬浮提示,默认不响铃、不振动。
旧渠道保留,已有文件通知仍可打开;自定义「发出通知」继续按其独立类别的设置提醒。
「发送短信」保留号码、补充正文和 发送当前位置 选项,隐藏 发送环境照片 及底部全部说明文字。 运行时忽略旧任务保存的照片标记,不启用相机或彩信;再次编辑并保存时会清除该标记,取消编辑仍保留原配置。 旧任务缺少位置字段时默认不勾选;编辑时勾选位置可留空补充正文,否则需要填写文字。
短信与邮件沿用同一正文格式,自动添加「本设备触发HyperosAutoTaskPlus行为」,手填文字作为补充放在下一行。 勾选位置时,正文使用以下格式:
本设备触发HyperosAutoTaskPlus行为,我的地址为(地点)(经度:…,纬度:…)(【https://uri.amap.com/marker?position=…】)
手填的补充内容(有填写时)
仅在任务发送时请求定位,最多等待 30 秒,只接受 15 秒内、精度不低于 200 米的位置。 通过系统地址服务解析地点,最多额外等待 6 秒;无法解析时写明「地点暂无法解析」,仍保留有效经纬度和地图链接。 定位权限不足、定位关闭或没有取得有效位置时,整条消息不发送并提示原因。 正文经纬度保留 Android 返回的 WGS-84 坐标;中国范围内的高德链接转换为 GCJ-02,避免直接使用 GPS 坐标产生偏移。
短信使用默认短信 SIM 卡,长内容按系统规则分段;未勾选位置时只包含固定开头和补充文字。 只有全部分段的系统发送回调成功,才处理本机的「已发送」记录,不代表收件人已阅读;没有收到结果时提示未知,不自动重发。
1.9.1 补充本机发送记录: 某些系统会发出短信,却不自动把安全服务发送的内容写入短信数据库。 本版本读取发送回调中的系统记录地址,先确认系统是否已经保存;缺少记录时,补写一条完整的已发送短信, 包含收件号码、实际发送正文、发送时间和短信 SIM 信息。长短信合成一条记录,连续发送相同内容仍分别保留。 发送失败、部分分段失败或结果未知时,不补写成已发送记录,也不会为保存记录再次发送短信。 短信记录的读写使用安全服务现有权限,不修改默认短信应用或自动更改系统权限。 若系统拒绝读取或写入,会明确提示「短信已发送,但未能保存到本机短信记录」,与发送失败区分。 本地回归覆盖分段结果与记录去重;目标手机的短信数据库权限及短信应用展示仍需真机验证。
此前设备反馈为普通短信可成功、彩信发送失败,真实失败原因尚未定位。旧彩信实现仍保留在仓库中, 1.9.0 暂停短信入口对它的调用,本次调整不表示已经修复彩信问题。
在「添加结果 → 功能 → 发送邮件」配置独立邮件结果,只需要 安全服务 作用域。 邮件通过网络连接邮箱的 SMTP 服务,不依赖短信 SIM 卡,也无需勾选系统桌面。
先在发件邮箱中开启 SMTP,并取得服务商提供的 SMTP 授权码或应用密码。填写单个发件邮箱、单个收件邮箱, 以及 SMTP 登录账号;账号留空时使用发件邮箱。当前支持 SMTP 密码认证,不支持 OAuth 登录。
| 邮箱预设 / 配置 | SMTP 主机 | 端口与加密方式 |
|---|---|---|
| QQ 邮箱 | smtp.qq.com |
465,SSL/TLS |
| 163 邮箱 | smtp.163.com |
465,SSL/TLS |
| 其它邮箱 | 填写服务商提供的主机名,不包含网址前缀或端口 | 按服务商要求填写,支持自定义端口 |
SSL/TLS 从建立连接时就加密,常用端口为 465;STARTTLS 先建立 SMTP 连接,再升级为加密连接,
常用端口为 587。两种方式都在 TLS 校验成功后才发送账号和授权码,服务器不支持所选加密方式时停止发送,
不会降级为明文认证。预设仅填写服务器参数,仍需填写自己的邮箱和授权码。
邮件主题必填,支持中文和表情;补充正文可留空,支持换行。发送当前位置 和 发送环境照片 默认勾选, 可分别开启或关闭,四种组合均支持。位置与固定正文使用上面的格式;勾选照片时拍摄一张后置环境照片, 以 JPEG 附件发送,不另存到相册。两项都关闭时发送固定开头与补充正文。所选定位或拍照失败时整封邮件不发送,并提示原因。
点击确定只保存配置,不会发送测试邮件;任务实际触发时才发送,退出时不会再次发送。 取消编辑不改变原任务;配置无效或授权码保存失败时不覆盖已有配置。
授权码通过本机 Android KeyStore 密钥加密,保存在安全服务私有数据中,并绑定 SMTP 主机与账号。 任务数据库、Gson / Serializable 参数和导出内容只保存凭据引用,不包含明文授权码。 更换发件邮箱、登录账号或 SMTP 主机后需重新输入授权码。导入任务不会带入授权码;清除安全服务数据、换机, 或导入到没有对应本机凭据的环境后,需要重新配置。已有授权码不会回填到编辑框,留空表示沿用当前有效凭据。
邮件按顺序处理,最多同时保留 1 封正在处理、3 封等待;队列已满时提示本次未加入。 提示「邮件已交给发件服务器」只表示 SMTP 服务器接受了邮件,不代表已到达收件箱,仍需检查收件箱和垃圾邮件。 服务器是否接收无法确定时会提示「发送结果未知」,不会自动重试,以免重复发送。 本轮尚未在真实手机和真实邮箱上验证发送、权限、定位及照片附件,实际可用性还需在目标设备检查。
这些操作都在安全服务进程执行,依赖该设备实际授予安全服务的权限。通知被关闭时不会开始录制;
短信在没有默认短信 SIM 卡时发送失败。系统拒绝操作时会显示失败提示,并在 HyperAutoEnh 日志里记录原因,
日志不主动记录号码、消息正文或邮件授权码。号码、邮箱、服务器和正文等普通设置沿用原生自动任务的数据库保存方式。
作用域:安全服务 + 系统界面。 本节的「解锁失败次数」和对应「成功解锁时」退出条件都需要这两个作用域。
从 1.8.3 起,点击「解锁失败次数」或「成功解锁时」后,弹出的编辑框始终显示所需作用域、包名和重启说明, 已有计数时也会显示。选项名称和任务摘要保持简洁,不附加作用域标注。
在「添加条件 → 事件 → 解锁失败次数」中设置 1~999 次,默认 3 次。 判断是「连续失败次数 ≥ 所选次数」:选 3 时,第 3 次失败即满足。
- PIN、密码、图案、指纹和人脸的锁屏认证失败共用一个计数。
- 成功解锁后清零;息屏、再次亮屏、切换解锁方式不会清零。
- 达到阈值时通知自动任务引擎,继续失败不会反复产生相同的阈值变化;与其它触发条件仍按原生「与」关系组合。
- 勾选「退出时恢复」会生成「成功解锁时」退出条件,解锁后可停止该任务启动的录音 / 录屏。
- 取消识别、识别超时、传感器错误、应用内验证和其它用户的认证不混入当前用户统计。
这项功能需要在 LSPosed 中为模块同时勾选 安全服务 com.miui.securitycenter 和
系统界面 com.android.systemui,更新作用域后重启手机。只勾选安全服务能看到条件,但不能获得失败事件。
SystemUI 通过 LockPatternUtils.reportFailedPasswordAttempt 和 KeyguardUpdateMonitor 的
指纹 / 人脸失败汇总方法采集;只保留计数和成功解锁序号,经本模块专用 Secure 设置交给安全服务。
每个手机用户分别存储,进程重启后继续累计,不采集密码或生物特征。成功解锁的清零依据系统 USER_PRESENT 广播。
HyperOS 如改动这些认证入口,对应方式会在 LSPosed 的 HyperAutoEnh 日志中报告 hook 失败,需要按该版本适配。
当前已核对 Android 15/16 的标准入口;各 HyperOS 机型实际是否经过这些入口仍需真机验证。
作用域:安全服务。 无需额外勾选系统界面或系统桌面。
在「添加结果 → 功能」末尾新增「动作链」。它把你在屏幕上的一连串触摸操作录下来, 任务触发时自动回放。点击「动作链」后先看到动作库:
- 列出已录制的动作链(名称、步数、约需时长、被几个任务使用),单选后点确定即可选用;
- 每条右侧有「编辑」;
- 底部「+ 录制新动作」开始录制。
录制。 点「录制新动作」后回到桌面并显示一个悬浮条(可拖动),此刻已经在录。 你自己操作手机——包括自己打开应用、点按、滑动、多指手势,操作悬浮条本身不会被录进去。 点悬浮条上的「停止」结束(熄屏、旋转屏幕、超过 10 分钟也会自动停止并保留已录部分)。 录完后自动切成步骤并保存,随即进入编辑器。
编辑。 已录制的动作链随时可再编辑:
| 步骤 | 说明与可改项 |
|---|---|
| 点击 / 长按 | 自动识别,可改按住时长 |
| 滑动 | 自动识别,可改总时长(按比例缩放,轨迹不变) |
| 多指手势 | 原样保留,只能整体删除,不能改参数 |
| 延迟 | 录制时两个动作之间的停顿会自动生成,可改毫秒数,也能手动插入 |
| 返回 / 主页 / 最近任务 | 手动插入 |
| 重复块 | 把某一步包成重复块,可改重复次数和每次间隔;第一版不支持嵌套 |
除单步参数外,还能改动作链名称、设置整链重复次数和每轮间隔,对步骤做上移 / 下移 / 复制 / 删除 / 插入,以及「试运行」预览、「重新录制」替换全部步骤、「删除动作链」。 删除正在被任务使用的动作链时会先列出受影响的任务名并要求确认。
回放与安全。 动作链存在独立的动作库里,任务只保存引用;同一条链可被多个任务选用, 改一处所有任务生效。回放前会检查:屏幕点亮、未锁屏、当前屏幕方向与录制时一致, 任一不满足就跳过本次并发通知说明。回放过程中:
- 手指碰一下屏幕会立即中止(避免和你抢操作),熄屏 / 锁屏同样中止;
- 一次只回放一条链,其它任务此时触发会排队,并发通知告知「哪个任务在等哪个任务」, 队列最多等待 5 条,满了则丢弃并提示;
- 中止或跳过都会发通知说明原因,正常完成不额外打扰。
动作链回放通过安全服务(system UID)的系统输入接口注入触摸,坐标按屏幕比例保存和还原。
坐标回放本质上是「按位置点」:应用改版、弹广告、页面没加载完都可能点错,涉及支付、删除等
敏感操作时请谨慎。录制、编辑在安全服务主进程,回放在其自动任务引擎进程;
系统接口不可用时会在 HyperAutoEnh 日志中报告,需按该版本适配。本功能尚未在真机上完成验证。
任务编辑页在「就执行」之后新增 添加再执行(行首的 + 与行末的 › 箭头都已去掉),行末是与「设置退出条件」 同款的开关按钮,默认灰色:点一下变蓝并立即添加一组,随后按钮自动回灰,每点一次加一组, 可以继续添加多组;点这一行其它位置也会加一组。 每组表头复用原生「如果运行」「就执行」那个表头控件,字号、颜色完全一致,标题固定为 再执行(不跟序号);表头行最右端有一个开关,关闭它时会先确认再删除整组。表头下面是整组 的一张原生卡片,卡片里依次是 等待时间 和执行项目列表,与上面的卡片外观一致:
- 点「等待时间」弹出与原生「时间间隔」条件相同的卡片选择器,填写大于 0 的整数并选择 秒 / 分钟,默认 1 秒;取消不改变原值。
- 表头行最右端的开关默认开启;关闭时会先确认再删除整组,取消(或按返回、点弹窗外)则开关弹回开启;长按表头行同样先确认再删除整组。
- 添加项目直接打开原来的「添加结果」页面,原生操作和本模块增加的操作都可使用,已有项目也可再次编辑。
- 不同分组可使用相同操作,例如先开启录音,再在一分钟后停止;同一组仍沿用原生的重复与互斥限制。
- 分组按界面顺序执行,每组的等待时间从上一组发出执行指令后开始计算,不是全部从任务触发时同时计时。
- 空组必须补充执行项目或关闭开关删除整组后才能保存;旧版本保存的停用分组仍保留在配置里并跳过执行,打开开关即可恢复。也可以不添加立即执行项目,只配置延迟分组。
例如:
如果:满足触发条件
就执行:开始录音
再执行(第一组):等待 1 分钟 → 停止录音、发出通知
再执行(第二组):再等待 10 秒 → 播放音频
延迟只控制 何时发出操作指令,不会等待录音、音频播放、邮件发送或动作链回放自然结束。 分组配置随任务保存,离开编辑页取消修改不会写入任务;选择结果页面返回或编辑页重建时会保留草稿。 等待采用系统闹钟,不会让自动任务线程休眠阻塞其它任务。停用、删除或修改任务会取消其尚未执行的分组; 同一任务再次触发会重新计时、替换上次尚未执行的分组,不同任务的计时互不影响。全部分组都停用时任务照常结束,不会发出任何操作。 勾选「退出时恢复」后,退出时先取消未执行的分组,再恢复已经执行且原本支持恢复的操作; 不会对尚未执行的项目做反向操作,也不会撤回已经发出的电话、短信、邮件、动作链或原生异步指令。
安全服务进程重启或手机重启后,不补跑之前还在等待的操作,避免过期的电话、短信、邮件等意外执行。 模块只保存「再执行」中已执行操作的恢复快照;原生「就执行」的运行时原值仍由安全服务管理。 如果宿主在重启时丢失了这些原值,之后退出可能只恢复到「就执行」完成后的状态,不能保证整项任务恢复到触发前的状态。 此功能不需要额外 LSPosed 作用域,具体操作仍沿用原有权限要求。目标手机上的页面交互、息屏延迟和退出恢复需真机验证。
在「添加条件 → 事件」里新增 应用使用时长,位置紧跟在原生「启动应用 / 离开应用」条件之后。 点按后先设置两个时间,再进入原生选应用页;支持多选应用,选应用页和原来的应用条件一致。
- 统计范围:第一个时间,例如最近 1 天、最近 1 周或最近 1 个月,按当前时刻向前滚动计算。
- 使用时长:第二个时间,例如范围是 1 天、使用时长是 30 分钟,表示最近 1 天内累计使用达到 30 分钟时触发。
- 两个时间都可选 分钟 / 小时 / 天 / 周 / 月,其中月按 30 天计算;使用时长不能超过统计范围。
- 应用打开并进入前台后开始累计,之后即使退到后台,只要进程没有被杀掉或强制停止就继续计时。
- 进程被杀掉后结束这段累计,下次重新打开时再开启新的一段;多选应用时各自的存活时间都会计入。
- 任务编辑页再次点按已添加的条件可以修改两个时间;需要更换应用时删除后重新添加。
- 到点使用精确闹钟通知自动任务引擎,不依赖应用退出时才结算。
- 使用时长没有自然的反向状态,因此不能作为「退出时恢复」的退出条件。
使用区间保存在安全服务私有数据里,安全服务重启后仍可继续按滚动范围统计。
前台事件复用安全中心已有的 ForegroundInfo 监听,不需要额外勾选其它应用或 SystemUI 作用域。
依赖已经放在仓库里,不需要 Android SDK / Gradle:
- JDK(脚本里写死在
D:\Environment\java,按需修改) build/libs/:android-4.1.1.4.jar、xposed-api-82.jarbuild/tools/aapt2.exe- d8 用的是 jadx 自带的 jar(脚本里的
JADX_JAR路径按需修改)
.\build.ps1 # Windows PowerShell
./build.sh # Git Bash / Linux产物:build/out/apk/HyperAutoTaskEnhance.apk。第一次构建会自动生成调试签名 build/debug.p12。
本地回归检查(默认先构建,使用 jadx 内含的 Gson,不连接手机):
.\test.ps1
.\test.ps1 -SkipBuild # 已构建且源码未改变时覆盖设备操作的 Gson / Serializable 配置恢复、号码与短信校验、一次性结果恢复,以及 录音 / 录屏的任务归属隔离,以及解锁失败累计、成功清零、阈值边界、用户隔离与持久化。 同时检查音频文件引用、常见格式识别、播放会话归属,以及通知内容保存、空白校验与退出行为。 同时覆盖短信附加选项的旧配置兼容、固定正文模板、坐标转换、位置新鲜度与精度, 以及保留的彩信 PDU 中文正文、图片附件、SMIL 引用和长度编码边界。 短信发送记录回归验证全部分段成功才确认、乱序与重复回调、失败与超时收束,以及连续相同短信的记录归属隔离。 邮件回归检查配置校验、凭据引用序列化、编辑副本隔离、附件四种组合与退出行为;协议测试使用本机回环 SMTP 服务、 临时测试证书和虚构凭据,检查 SSL/TLS、STARTTLS、证书与主机名校验、认证失败、UTF-8 MIME、附件、超时及未知发送结果, 不连接外部邮箱,也不发送真实邮件。测试脚本覆盖范围不代表目标手机或真实邮箱已经验证通过。 动作链回归覆盖二进制编解码往返与损坏 / 未知版本拒绝、手势分段(点击 / 长按 / 滑动 / 多指判定与手势间延迟)、 展开顺序与嵌套禁止、编辑操作(滑动时长缩放、点击坐标修改)以及排队的先进先出、上限与清空。 再执行回归覆盖多组配置的 Gson / Serializable 恢复、启用开关的持久化与旧数据默认值、停用组的校验与跳过、秒与分钟换算、延迟边界、草稿深拷贝、未知版本与嵌套拒绝, 以及原生动作编解码、执行顺序、重复触发失效、取消隔离、过期时间区间恢复记录失效和延迟组中的动作链引用。 相机、麦克风、系统投屏、运营商短信、真实 SMTP 收发与本机 KeyStore、地点解析、真实解锁事件、文件选择授权、 实际音频解码、短信数据库读写与短信应用展示、系统截图入库及悬浮通知仍需在目标手机上验证。 动作链的触摸监视、事件注入、悬浮条与真机回放同样需要在目标手机上验证。
module/
AndroidManifest.xml
assets/xposed_init 模块入口类名
res/ 图标、名称、作用域
src/io.github.codecodegogogo.HyperosAutoTaskPlus/
MainHook.java 入口,依次装载各项功能
UnlockAppResultHook.java 功能 1
FirstAppConditionHook.java 功能 2 的 hook 部分
InvisibleModeResultHook.java 功能 3 的 hook 部分
ScreenStateConditionHook.java 功能 4 的 hook 部分
AppUsageConditionHook.java 功能 13:应用使用时长的工厂、选应用、编辑与前台事件接入
ExitConditionHook.java 功能 5
IntervalConditionHook.java 功能 6
SensorConditionHook.java 功能 7
GeofenceConditionHook.java 功能 8
DeviceActionResultHook.java 功能 9,沿用隐身模式结果的接入路径
ActionChainResultHook.java 功能 11,动作链结果接入工厂 / 添加页 / 编辑页
ThenExecutionHook.java 功能 12,再执行分组编辑、开关删除整组、原生结果选择与草稿恢复
ThenExecutionEngineHook.java 再执行接入引擎执行、退出及任务生命周期
MmsAttachmentProvider.java 保留的彩信临时附件授权,当前短信入口停用
UnlockFailureConditionHook.java 功能 10 的条件工厂、编辑与引擎接入
UnlockFailureSourceHook.java SystemUI 锁屏认证事件采集
UnlockFailureState.java 连续失败计数与跨进程数据格式
ConditionHookSupport.java 新增条件共用的工厂、编辑与引擎 hook
FirstAppKeys.java 各条件 / 结果的 key 常量
DexInjector.java 把模块 dex 注入安全服务的 ClassLoader
HookUtils.java 按签名找方法等公共工具
inject/ 会被注入到安全服务里运行的类
FirstAppConditionItem.java 冷启动 / 杀死应用条件的基类
FirstStartAppConditionItem.java
FirstLeaveAppConditionItem.java
FirstAppRuntime.java 进程存活跟踪,通知引擎重新判定
InvisibleModeResultItem.java 隐身模式结果项
InvisibleModeRuntime.java 切换隐身模式、弹开启 / 关闭选择框
ScreenStateConditionItem.java 屏幕状态条件项
ScreenStateRuntime.java 亮 / 灭屏计时、到点通知引擎、卡片式编辑对话框
AppUsageConditionItem.java 统计范围、使用时长与单位换算
AppUsageRuntime.java 进程存活累计、滚动时间窗、持久化与精确计时
EngineBridge.java 把「请重新判定这些条件」交给引擎,各运行时共用
DeviceActionResultItem.java 设备操作的持久化配置与 n()/o() 执行入口
DeviceActionRuntime.java 设备操作编辑框、异步分发、截图和拨号
RecordingRuntime.java 录音 / 录屏会话、停止通知、归属与资源释放
PhotoRuntime.java 前后摄像头选择、对焦拍摄与超时清理
SmsRuntime.java 默认 SIM 短信分段与发送结果,保留旧彩信分支
SmsSendProgress.java 所有分段成功后仅确认一次,过滤重复、失败和迟到回调
SmsSentHistory.java 系统已发记录确认、去重与缺失记录补写
SmsLocationRuntime.java 单次定位、限时地点解析及资源清理
LocationMessage.java 短信 / 邮件共用固定正文格式与高德坐标转换
EmailConfig.java SMTP、邮箱、主题、正文、附件开关及凭据引用
EmailEditor.java 邮件配置、预设选择与异步保存
EmailCredentialStore.java 本机 KeyStore 加密、主机账号绑定与凭据读取
EmailRuntime.java 邮件队列、定位与照片准备、异步发送及资源释放
SmtpClient.java SSL/TLS / STARTTLS、认证、发送与超时结果
MimeMessageWriter.java UTF-8 邮件主题、正文及 JPEG 附件封装
MmsRuntime.java 保留的照片压缩、系统彩信发送及结果回调
MmsPdu.java 保留的 UTF-8 正文、SMIL 和 JPEG 彩信协议封装
MediaOutput.java 媒体文件的创建、发布与失败清理
MediaFileNotification.java 文件保存完成通知及直接查看原文件的按钮
ScreenshotRuntime.java 无声获取屏幕画面、PNG 保存与查看文件通知
ActionReceivers.java 动态接收器的 Android 版本兼容
AudioPickerFragment.java 系统文件选择与持久读取授权
AudioPlaybackRuntime.java 本地音频播放、音频焦点与按任务停止
NotificationRuntime.java 自定义正文的系统标准通知、通知渠道与按任务更新
NotificationAttention.java 标准高优先级与 MIUI / HyperOS 悬浮提示
UnlockFailureConditionItem.java 解锁失败阈值、成功解锁退出条件
UnlockFailureRuntime.java 观察统计变化、条件判断与次数编辑框
ActionChainRuntime.java 动作链结果入口:工厂、打开动作库、触发回放、摘要与图标
ActionChainResultItem.java 动作链结果项,只存动作库中的 chainId 引用
ThenResultItem.java 随原生任务保存的再执行配置容器
ThenGroup.java 每组等待时间、稳定标识与执行项目
ThenAction.java 原生结果 key 与配置 JSON,不持久化抽象 TaskItem
ThenActionCodec.java 经宿主工厂恢复具体结果类型与配置校验
ThenEditorSupport.java 分组草稿操作与复用原生卡片选择器的等待时间设置
ThenRuntime.java 顺序调度、重复触发替换及已执行操作恢复
ActionChain.java 一条动作链:步骤、整链重复与二进制编解码、展开成回放计划
ActionStep.java 单步(点击/长按/滑动/多指/延迟/按键/重复块),不可变
GestureFrame.java 一帧触摸采样,坐标归一化到 0~1
GestureSegmenter.java 把原始触摸帧切成步骤,手势间空档转为延迟
ActionChainQueue.java 回放的先进先出队列与上限,纯逻辑
ActionChainStore.java 动作库文件读写(原子替换)与按 auto_task.db 查任务归属
ActionChainRecorder.java 录制悬浮条、触摸采集与保存
ActionChainEditor.java 动作库弹窗与步骤编辑器(miuix 对话框)
ActionChainTester.java 编辑器里的试运行:倒计时后按回放逻辑预览
ActionChainPlayer.java 回放会话:队列驱动、前置检查、中止与通知(remote 进程)
GesturePlayer.java 把展开后的步骤按时间轴注入成触摸 / 按键
GestureMonitor.java 旁听全局触摸(录制、检测手动中止),反射 monitorGestureInput
InputInjector.java 反射 injectInputEvent,构造多指 MotionEvent 与按键
ActionChainNotice.java 动作链回放 / 排队 / 中止通知
OverlayWindow.java 旧 android.jar 缺失的悬浮窗类型常量
stubs/ 安全服务、miuix 与较新 Android API 编译桩,不进 dex
build.ps1 / build.sh 构建脚本
test.ps1 / tests/ 设备操作、邮件协议、解锁失败条件、动作链与再执行 JVM 回归测试
安全服务 APK 及其反编译输出、构建产物、签名密钥都在 .gitignore 里,不随仓库上传。






