Skip to content

Latest commit

 

History

History
644 lines (441 loc) · 45.4 KB

user_guide.md

File metadata and controls

644 lines (441 loc) · 45.4 KB

指尖分身 App 操作手册

适用版本:当前仓库中的 Android 构建(最低 Android 7.0,图像识别需 Android 11 及以上) 本文是面向使用者的操作说明;代码结构与开发约束见 project_structure.md,功能概览见 README.md。

目录


1. 应用简介

本应用名为「指尖分身」,是一款基于 Android 无障碍服务的悬浮式自动化工具,包含三种可切换的模块:

模式 适合场景 工作方式
连点器 固定坐标的重复点击、滑动、返回/主页/通知栏 在屏幕上摆放编号点击点或滑动点,按顺序循环执行
代点器 按钮位置不固定、需要按文字或图片定位 为悬浮子按钮配置「目标文字」「模板图片」或「屏幕坐标」,点击子按钮时临时定位并点击
录点器 懒得逐个摆放点位,但操作节奏固定 打开录制后直接在被控应用上操作,记录点击 / 长按 / 滑动与间隔,保存为脚本后按原节奏回放

三个模块互相独立:各自的脚本、运行状态与悬浮窗互不影响,只共用同一套悬浮窗与弹框外观。三种模式都通过 Android 无障碍服务下发模拟手势,因此都必须先开启无障碍服务。

2. 首次使用

2.1 开启悬浮窗权限

  1. 打开 App,主页「权限与状态」中「悬浮窗权限」显示为「未授权」,点击下方的「获取权限」按钮。
  2. 按提示进入系统设置,允许本应用「显示在其他应用上层」(悬浮窗权限)。
  3. 返回 App,权限状态会更新为「已授权」。

部分国产系统还需要额外允许「后台弹出界面」「锁屏显示」等权限,否则悬浮窗可能不显示或被系统回收。

2.2 开启无障碍服务

  1. 在系统设置中进入「无障碍」→「已安装的应用」→ 本应用。
  2. 打开无障碍服务开关,并确认系统弹窗中的授权提示。
  3. 返回 App,主界面「无障碍服务」一行会显示「已开启」。

如果升级安装后点击/截图突然失效,请到无障碍设置里关闭再重新开启本应用的无障碍服务。图像识别新增了截图能力声明,必须重新开启才会生效。

2.3 系统要求

  • Android 7.0(API 24)及以上:可使用连点器、代点器的文本匹配与坐标点击,以及录点器。
  • Android 11(API 30)及以上:才支持图像识别的屏幕截图与模板匹配。
  • 建议关闭电池优化或将本应用加入后台白名单,避免悬浮窗服务被系统清理。
  • 已适配全面屏(刘海屏 / 挖孔屏)与手势导航,页面内容不会被状态栏或导航栏遮住。
  • Android 13 及以上首次启动悬浮窗时会申请通知权限,允许后即可在通知栏看到「连点器运行中」「录点器运行中」等提示并直接「停止」。

2.4 启动与关闭

  1. 在主界面选择模块(连点器 / 代点器 / 录点器)。
  2. 点击「启动悬浮窗」,悬浮窗会出现在屏幕上。
  3. 需要停止时,可点击主界面的「关闭悬浮窗」,或使用通知栏中的「停止」按钮。

切换模块时如果当前悬浮窗正在运行,App 会先关闭当前悬浮窗,再自动启动目标模块的悬浮窗;权限(悬浮窗 / 无障碍)未齐备时切换会失败并保留原模块。

「启动 / 关闭悬浮窗」和切换模块都有 600ms 的最短间隔:连续快点不会重复创建或销毁悬浮窗,被忽略的那一下不会排队到后面再生效,因此不会出现按钮显示「已停止」但悬浮窗还留在屏幕上、或两个模块的悬浮窗叠在一起的情况。

3. 主界面

主界面自上而下分为四块,状态一目了然:

区域 说明
顶部横幅 显示应用图标、应用名,以及当前模式与一句话说明(如「连点器 · 按点位循环连点」)
权限与状态 标题行左侧是「权限与状态」+ 就绪徽标(已就绪 / 待授权),行尾是「刷新」按钮,点击可重新检测权限与悬浮窗服务状态。下方卡片列出三项状态:悬浮窗权限、无障碍服务、悬浮窗运行,每项左侧是状态圆点(绿色=正常)、右侧是状态徽标(如「已授权」「未开启」「运行中」)
获取权限 仅当权限未齐备时出现的按钮,点击后依次引导开启悬浮窗权限与无障碍服务;权限齐备后自动隐藏
运行模式 连点器 / 代点器 / 录点器 三段开关,选择结果会持久化;切换时若悬浮窗在运行,会自动关闭当前悬浮窗并启动目标模块
底部操作 「启动悬浮窗 / 关闭悬浮窗」主按钮,占满整行(权限未齐备时置灰不可点,运行中变为红色的「关闭悬浮窗」)

主界面会自动跟随系统深色 / 浅色模式切换配色。

已适配全面屏(刘海屏 / 挖孔屏):主界面内容会自动避开顶部状态栏与底部导航栏,不会被状态栏遮住;截图框选页与相册裁剪页的底部按钮也会自动抬到导航栏之上。

4. 连点器使用

4.1 悬浮窗主按钮

操作 效果
单击 展开 / 折叠操作按钮区
按住拖动 移动悬浮窗,松手后按当前方向吸附:竖排贴左 / 右边缘;横排(含横屏下的折叠按钮)贴上 / 下边缘,水平位置保留松手处、不会强制靠右(距边约 12dp,自动避开状态栏、导航栏与挖孔)
空白区域点击 运行中点击悬浮窗空白处可立即停止连点
横竖屏切换 自动重排并贴回屏幕内;横屏下按钮贴顶或贴底(水平位置保留),横屏高度放不下竖向按钮栏时展开栏改为横向一排

4.2 添加与移动点击点

  1. 展开悬浮窗,点击「添加」。
  2. 屏幕中央会出现一个带编号的点击点标记(青绿色圆角方块,数字外面套一圈细白环)。
  3. 按住点击点拖动到目标位置。
  4. 长按点击点(约 500ms)可打开该点的设置对话框。

运行中该点正在被点击时,标记会短暂变成浅青色强调,执行完恢复原样,不会中途消失。

4.3 点击点设置

设置项包括:

  • 按钮名称(显示当前编号)
  • 类型:点击 / 双击 / 返回键 / 主页键 / 打开通知栏
  • 点击位置:中间 / 随机
  • 延迟(毫秒):本点执行完后的等待时间
  • 触摸时长(毫秒):单次点击或滑动的持续时间
  • 重复次数:本点连续执行次数
  • 随机距离(像素):在中心点周围随机偏移的范围

点击「保存」生效,点击「取消」放弃本次修改。

该弹框与代点器的各弹框共用同一套外框与底部按钮行(取消在左、保存/确定在右),内容较多时在内容区上下滑动即可。

4.4 滑动点

  1. 点击「滑动」创建一个滑动对:起点 A(青绿色实心方块)与终点 B(浅色描边方块),中间用一条青绿色通道连接,靠近终点处有白色箭头指示滑动方向。
  2. 分别拖动 A、B 调整位置,通道会实时跟随。
  3. 长按任意一端可打开滑动设置,统一设置起点/终点参数。
  4. 滑动类型固定,速度由「滑动持续时间」控制。

运行中执行滑动时,A、B 与中间通道会一起短暂变成浅青色强调,执行完恢复原样——通道与标记始终可见,不会中途消失。

4.5 删除点

  • 点击「减少」删除最后一个点击点。
  • 如果最后一个是滑动对,会连同起点、终点和通道一起删除。

4.6 启动与停止

  1. 点击「启动」开始按编号顺序循环执行,启动按钮同时变为停止按钮。
  2. 运行中展开栏只保留主按钮与「停止」按钮,添加、滑动、减少、设置、透明度、退出全部隐藏;主按钮仍可展开 / 折叠。
  3. 点击停止按钮、点击悬浮窗空白处、点击通知栏「停止」,或划掉应用任务,都会停止连点。
  4. 停止后展开栏恢复全部按钮,点击点恢复可拖动,并清除执行态高亮。

4.7 调节透明度

在非运行状态点击「透明度」打开弹框,里面有两根滑块:

  • 悬浮窗:调节悬浮窗本身的不透明度(20%~100%);
  • 点击 / 滑动点位:调节屏幕上编号点标记与滑动通道的显示不透明度(20%~100%)。

滑块为统一的胶囊轨道样式:轨道是圆角细条,已调节的部分为品牌色,滑钮是带品牌色描边的白色圆点;按住滑钮拖动时圆点底色变为浅品牌色、投影加深,方便看清当前档位。也可以直接点击轨道上的任意位置跳转到该档位。

按住任意滑块拖动时,弹框会连同背景遮罩一起暂时隐藏,并在你正在拖的那根滑块原来的位置显示一条 20% 不透明度的百分比进行条——位置与滑块完全重合,滑钮一直在手指下方,不会跳到屏幕底部,所以可以放心继续拖;松手后弹框自动恢复。

  • 点「确定」保存两根滑块的设置,下次启动连点器时自动沿用;
  • 点「取消」或按系统返回键,恢复打开弹框前的透明度。

运行中点位保持你设置的不透明度正常显示,不会再临时压暗;正在执行的那个点位(滑动时含起点、终点与通道)会短暂变成浅青色强调,执行完恢复原样。连点器与代点器各自保存自己的透明度,互不影响;透明度只影响显示效果,不影响点位点击与拖动。

4.8 总循环次数与脚本管理

点击悬浮窗「设置」:

  • 总循环次数:0 或留空表示无限循环。
  • 脚本:
操作 说明
保存当前点位 把当前所有点位保存为命名脚本(名称最多 16 个字符);同名会先确认是否覆盖
点击脚本名 加载该脚本;若悬浮窗上已有点位,会先确认覆盖(加载前会自动停止连点)
改名 修改脚本名;新名已存在时会提示
删除 二次确认后删除该脚本

列表为空时显示「暂无已保存脚本」。脚本保存在应用内(见第 7 章);升级前的单份点位会在首次打开脚本列表时自动迁移为「默认脚本」,且只迁移一次。

悬浮窗上正在编辑的点位只存在内存中,关闭悬浮窗后会丢失,需要保留时请先「保存当前点位」。

5. 代点器使用

5.1 悬浮窗状态与手势

代点器启动后只显示悬浮主按钮(折叠态),单击主按钮展开 / 折叠操作按钮区。尚无子按钮时单击会直接进入编辑态,方便先添加按钮或从「脚本管理」加载脚本。

状态 显示内容
折叠态 仅主按钮
展开态 主按钮 + 已配置的子按钮列表
编辑态 主按钮 + [+] + 子按钮列表 + [脚本管理] + [透明度] + [关闭]

主按钮手势:

  • 单击:展开 / 折叠;处于编辑态时单击会退出编辑并保持展开
  • 双击:进入编辑态

横竖屏切换后悬浮窗会自动重排并贴回屏幕内;横屏高度放不下竖向列表时,主按钮与子按钮改为横向一排,编辑态长按拖动排序也改为左右方向。

  • 按住拖动:移动悬浮窗,松手按当前方向吸附——竖排贴左 / 右边缘;横排(含横屏下的折叠按钮)贴上 / 下边缘,水平位置保留松手处,吸附点在安全区内(避开状态栏、导航栏与挖孔)

编辑态的 [关闭](X)才会关闭悬浮窗服务;单击主按钮只退出编辑态。

无障碍服务未连接时,主按钮会变灰并提示重新开启。

5.2 新建快捷按钮

  1. 编辑态点击 [+],打开「新建快捷按钮」弹框。
  2. 填写按钮名称:含中文最多 3 个字,纯英文/数字最多 6 个字符;留空默认「按钮N」。名称在悬浮按钮上放不下时会自动缩小字号,不会被省略。
  3. 选择识别方式:在「识别方式」分段开关上点选 文本 / 图像 / 坐标,下方一行灰字会说明当前类型的含义。
  4. 按类型填写目标内容(详见下文),配置项在弹框内的描边卡片中。
  5. 选择动作类型(点击 / 双击 / 长按 / 滑动,默认点击)并填写对应参数,详见 5.3。
  6. 按需调整「随机坐标偏移」(默认开启,半径 5px),详见 5.3。
  7. 点击「新建」保存,按钮会插入到列表末尾([+] 之后)。

弹框内容较高时(如图像识别的高级参数)可直接在弹框内上下滑动,滑动后下半部分照常可点。

新建完成后可在编辑态点击该按钮,随时修改或删除。

同一子按钮在 500ms 内连续点击只会执行一次(防抖),避免误触重复点击。

弹框布局说明:应用内所有弹框(新建 / 编辑按钮、脚本管理、透明度、关闭确认、全局设置、点击点设置等)都是同一套外观——顶部是标题,下面是可上下滑动的内容区,底部是按钮行:左边「取消」(白底描边),右边是主操作(品牌色实心,如「新建」「保存」「确定」)。红色的文字或红色实心按钮表示危险操作(如「删除」),执行前一定会再弹一次确认框。

5.3 动作类型与随机坐标偏移

识别方式只负责给出一个坐标;动作类型决定拿到坐标后怎么执行。四种动作共用同一条识别链路,不需要为每种动作重复配置识别。

动作 可调参数 说明
点击(默认) 无 在识别坐标点一次
双击 双击间隔 100~300ms(默认 150) 两次点击放在同一个手势里提交,间隔就是两次触摸的时间差
长按 长按时长 200~10000ms(默认 800) 在识别坐标按住指定时长后松开;输入超过 10000ms 按 10000ms 执行并提示
滑动 方向 上 / 下 / 左 / 右、距离 50屏幕短边一半 px(默认 300)、时长 1002000ms(默认 300) 从识别坐标沿所选方向直线滑动;距离超过上限按上限执行并提示

随机坐标偏移(所有动作共用)

  • 每次执行前,在识别到的 X / Y 上各加一个 -N ~ +N 的随机整数,避免长期点在同一像素上。
  • 「随机坐标偏移」勾选行默认开启;半径默认 5px,可填 0~50px,填 0 等同关闭。
  • 偏移只加一次:双击的两次触摸用同一个偏移后坐标;滑动只偏移起点,终点由偏移后的起点加方向与距离算出,不会二次随机。
  • 偏移结果与滑动终点都会自动限制在屏幕内,四周留 1dp 边距,防止手势越界被系统拒绝。
  • 如果识别本身很准、需要严格固定位置,把半径填 0 或取消勾选即可。

失败提示

  • 手势提交失败(无障碍服务断开或被系统拒绝)时会提示「手势提交失败,请到系统设置检查无障碍服务」,主按钮同时变灰。
  • 手势被系统取消时会提示「手势被系统取消,请重试」,不会静默失败。

5.4 文本匹配

  1. 识别方式选择「文本匹配」。
  2. 在「目标文字」中填写界面上要点击的文字,例如「确定」「下一步」。
  3. 点击子按钮时,无障碍服务会在当前前台界面查找该文字,取节点中心坐标后执行所选动作(点击 / 双击 / 长按 / 滑动)。

查找按三层逐级放宽:

  1. 系统无障碍文本检索;
  2. 自行遍历整个界面的节点树(有些界面的文字挂在深层节点上,系统检索会漏);
  3. 文字被拆成多个节点时(例如「立即」和「抢购」是两个节点),按子树文字拼接后比对。

比对规则:忽略空格、换行与大小写,所以「WLAN 安全检测」和「WLAN安全检测」视为同一个文字。同一文字命中多个节点时,优先可点击的节点,其次文字完全相等的,最后取位置最深的。

老是命不中时的排查顺序

  • 目标文字是否和界面上显示的完全一致(多字、少字、繁简、标点都会导致不匹配);
  • 目标是否还在加载,或被弹窗、浮层挡住;
  • 主按钮是否变灰——变灰说明无障碍服务已断开,需要到系统设置重新开启;
  • 界面是否属于游戏、自绘界面或部分 WebView,这类界面不向无障碍暴露文字,文本匹配必然失败,请改用图像识别或坐标。

需要精确定位原因时,连接电脑看日志:

adb logcat -s ClickService

未命中时会输出:

文本未命中「xxx」,窗口=包名,可见文字=界面上的文字1 | 文字2 | …

把「可见文字」清单和你填的目标文字对照,就能看出界面上它究竟写成了什么。若输出「(无任何可读文字,该界面可能不向无障碍暴露文字)」,说明这个界面无法做文本匹配。

建议填写完整且唯一的文字;文字过短或同屏出现多个相同文字时,可能定位到非预期节点。

5.5 图像识别

图像识别适用于按钮位置经常变化、但外观固定的界面。

需要 Android 11 及以上,并且无障碍服务已开启截图能力。

5.5.1 准备模板图

方式一:屏幕截图

  1. 识别方式选择「图像识别」。
  2. 点击「屏幕截图」。此时配置弹框与悬浮窗会先自动隐藏,避免被截进模板。
  3. 截屏后进入框选页:拖动选框圈住目标,双指缩放调整范围。
  4. 在底部比例条选择裁剪比例(可选):
    • 自由
    • 1:1
    • 4:3 / 3:4
    • 16:9 / 9:16
    • 自定义:输入宽 : 高
  5. 点击「确定」保存模板图并回到弹框。
  6. 如果不想截了,直接按系统返回键退出,会回到新建/编辑弹框。

框选页底部是半透明操作栏:上排为比例按钮(自由 / 1:1 / 4:3 / 3:4 / 16:9 / 9:16 / 自定义,选中项为品牌色实心),下排为操作按钮,「确定」为品牌色实心、「取消」为描边样式。

方式二:从相册选

  1. 点击「从相册选」,系统相册会打开。
  2. 选择一张图片,进入裁剪页。
  3. 同样可拖动、双指缩放并选择裁剪比例。
  4. 点击「裁剪并确定」保存;按返回键或「取消」则回到弹框。

已选好模板图后会显示缩略图,点击缩略图可重新选择。

5.5.2 高级匹配参数

展开「高级匹配参数」后可调整:

参数 默认值 说明
相似度阈值 0.80 0~1,越高越严格;匹配不到时先尝试适当降低
降采样倍率 2 1~4,越大匹配越快但精度越低
匹配区域 全屏 关闭「全屏搜索」后只在上次框选区域附近搜索,速度更快
灰度匹配 开启 忽略颜色差异,抗色偏;界面颜色是关键特征时可关闭
重试次数 1 未匹配到时的重试次数
重试间隔 300ms 每次重试之间的等待时间

5.5.3 执行过程

点击子按钮后:

  1. 自动隐藏悬浮窗并截取当前屏幕(模板图片的读取也在这一步的后台线程完成,点「执行」不会因为解一张大图而卡住界面)。
  2. 在工作线程中用模板匹配算法寻找相似度最高的位置。
  3. 相似度达到阈值后,在目标中心执行所选动作(点击 / 双击 / 长按 / 滑动)。
  4. 未匹配到时按设置重试;全部失败会提示最高相似度。

截图前会隐藏悬浮窗和配置弹框,因此模板中不会出现应用自身的悬浮按钮。部分机型上系统截屏可能完全不回应,App 会在 3 秒后按「截图失败」处理并恢复悬浮窗,不会让按钮点了没反应、也不会一直卡在隐藏状态。

5.6 坐标定位

适合目标位置固定的场景。

手动输入

  1. 识别方式选择「坐标」。
  2. 填写 X、Y 屏幕像素坐标。
  3. 点击「新建」时若坐标超出屏幕范围,会提示重新填写。

屏幕取点

  1. 点击坐标输入框下方的「屏幕取点」。
  2. 屏幕会覆盖半透明置灰层与网格,仍能看到下层应用。
  3. 在目标位置点一下,坐标会自动填回 X/Y。
  4. 取点浮层会消费全部触摸,不会触发下层应用点击。
  5. 不想取点时按系统返回键退出,回到新建/编辑弹框。

屏幕取点页没有取消按钮,统一用系统返回键退出。

5.7 子按钮的编辑、排序与删除

编辑态下:

  • 点击子按钮:打开「编辑快捷按钮」弹框,可修改名称、识别方式、目标内容、匹配参数、动作类型与参数、随机坐标偏移。
  • 长按并拖动:上下拖动调整子按钮顺序;长按后原地松手不会打开弹框。
  • 在编辑弹框中删除:点击「删除」,二次确认后移除该按钮;如果是图像按钮,会同时清理其模板图文件。

修改或删除会立即反映到悬浮窗的按钮列表。悬浮窗不再提供 [-] 按钮,所有删除操作都在编辑弹框内完成。

5.8 脚本管理

编辑态点击 [脚本管理] 打开脚本管理弹框:

操作 说明
保存当前按钮 把当前内存中的按钮列表保存为命名脚本;同名会先确认是否覆盖
点击脚本名 加载该脚本;若悬浮窗上已有未保存按钮,会先确认覆盖
重命名 修改脚本名;新名已存在时会提示
删除 二次确认后删除脚本,并清理其图像按钮引用的模板图

悬浮窗上正在编辑的按钮列表只存在内存中,应用/服务关闭后会丢失。请及时「保存当前按钮」。

5.9 调节悬浮窗透明度

编辑态点击 [透明度] 打开滑块弹框,拖动滑块即可实时看到悬浮窗透明度的变化(可调范围 20%~100%)。按住拖动时弹框与遮罩会暂时隐藏,改为在滑块原来的位置显示一条 20% 不透明度的百分比进行条(与滑块重合、滑钮跟着手指走);松手后弹框恢复。滑块外观与连点器完全一致(胶囊轨道 + 白色圆形滑钮),点轨道可跳转档位。页面与连点器的透明度弹框完全一致,但连点器与代点器各自保存、互不影响:

  • 点「确定」保存设置,下次启动代点器时自动沿用;
  • 点「取消」或按系统返回键,恢复打开弹框前的透明度。

透明度只影响显示效果,不影响按钮点击与识别功能。

5.10 停止代点器

  • 编辑态点击 [关闭](X):直接关闭悬浮窗服务。如果当前有未保存的按钮,会先弹出提示:
    • 「保存并关闭」:已有脚本名的列表直接覆盖保存;未命名的新列表会先要求输入脚本名(同名会确认是否覆盖)。
    • 「不保存关闭」:丢弃未保存的按钮并关闭。
    • 「取消」:不关闭,继续编辑。
  • 点击通知栏中的「停止」按钮。
  • 或回到主界面点击「关闭悬浮窗」。
  • 编辑态中单击主按钮只是退出编辑态,不会关闭服务。

6. 录点器使用

录点器把你真实的手势录成脚本,再按录制时的节奏重新执行。它与连点器、代点器的脚本、存储、运行状态完全独立,互不影响。

6.1 悬浮窗与编辑态

启动后只显示主按钮:单击展开 / 折叠,按住拖动;松手时按当前方向吸附——竖排贴左 / 右,横排或横屏折叠态贴上 / 下且水平位置保留(距边约 12dp,避开系统栏与挖孔)。悬浮窗是单列设计,主按钮固定在列的最上方,展开 / 折叠只让面板向下变长,窗口原点不动,主按钮屏幕位置始终不变——和代点器一样,不会有整窗平移的抽帧感。编辑态展开后自上而下是 主按钮 + 信息条(有脚本时)+ 录制 + 启动 + 文件 + 设置 + 关闭:

控件 作用
信息条 只读,显示当前脚本名;没有任何脚本(0 步)时整块不显示,不会出现「未命名脚本」占位
录制 开始一段新录制;当前有步骤或草稿时先确认「重新录制会清空」
启动 先弹「开始回放」确认框,可设重复次数(1–999),确认后进入运行态并开始回放;0 步时置灰
文件 打开脚本管理:保存当前步骤 / 加载 / 改名 / 删除;有草稿时可从这里恢复
设置 回放倍速(0.5× / 1× / 1.5× / 2×)、悬浮窗透明度,底部是红色的「关闭悬浮窗」
关闭 按钮列最后一项(×图标,与连点器 / 代点器同款),关闭悬浮窗服务;回放中先确认停止,有未保存步骤时三选一

信息条与主按钮都是 40dp 方块、与连点器 / 代点器按钮同一形态,竖排间距 4dp;信息条用品牌浅青底 + 深青字(不是白色),在一排实心按钮里既有整体感、又能看出它不可点。主按钮图标是三条横杠(与另外两个模块主按钮同款),录制按钮是同心圆,两者不会混淆。横屏(或分屏高度不够)时整列改为横排:主按钮在最左,随后依次是信息条与操作按钮,向右生长。编辑态按钮列的最后一项是「关闭」,和连点器 / 代点器一样用 × 图标;「设置」弹框底部的红色「关闭悬浮窗」也保留,两处入口效果相同。未完成的草稿由启动确认框和「文件」入口的「恢复草稿」处理,信息条上不显示步数。

横竖屏切换后面板会自动重排并贴回屏幕内;横屏展开一律用横排,吸附方向改为贴顶或贴底(水平位置保留拖动处);若屏幕两个方向都放不下,会提示「当前屏幕放不下展开面板,请旋转设备后再试」。

6.2 录制

  1. 点「录制」,先出现准备录制小条(此时还没开始记录),点小条上的「开始」。
  2. 屏幕上会盖一层透明捕获层,你在其它应用上的点击、长按、滑动都会被记录;悬浮窗自身与系统栏之外的触摸都算数。
  3. 小条变为录制态,显示「录制中 · N 步」;每记一步整条闪一下,被点的位置会闪一个圆环,方便确认已经录上。
  4. 小条是半透明的(固定 50%,不跟随设置里的悬浮窗透明度),悬在应用上方也能看清下面的内容。小条上只有左侧的 ≡ 把手和右侧两个按钮能点:≡ 按住拖动可移动小条,其余区域(标题、说明文字、空白处)点了不会落在小条上——准备态会直接落到下面的应用,录制态则被忽略(不会记成一步,也不会提示),避免录出点到小条本身的步骤。
  5. 点「暂停」:捕获层让出触摸,你可以正常操作 App 而不被记录;点「继续」接着录,暂停的时长不会计入下一步的等待。
  6. 点「停止」后三选一:
    • 保存并结束:输入脚本名后保存(0 步时置灰);
    • 继续录制:回到录制中;
    • 丢弃录制:有步骤时二次确认后丢弃;一步都没录到时也照样可用,但不再二次确认,点了直接结束本次录制并退出,不会卡在结束弹框里。
  7. 状态栏与底部导航栏区域的触摸不会被记录,会弹出提示,请避开系统栏操作。

判定规则:短按记为点击;按住达到系统长按时长记为长按(记录实际按压时长);移动超过系统触摸阈值记为滑动(记录起终点与总时长)。单次录制最多 500 步,达到上限会自动暂停并提示。

6.3 运行(回放)

  1. 编辑态点「启动」,先在「开始回放」确认框里设重复次数(1–999,默认沿用脚本当前的值),点「启动」后进入运行态并开始回放当前脚本(无障碍未连接时会提示并留在编辑态)。
  2. 运行态不显示任何编辑控件,展开后自上而下是 主按钮 + 信息条 + 启动/暂停 + 停止 + 返回(横屏为同一顺序的横排,主按钮在最左)。信息条只读,三行依次是脚本名、第 X/Y 轮、第 N/M 步;数字变长放不下时该行会单独缩小字号(三行可能不一样大),保证始终单行显示。40dp 见方,与主按钮等大。
  3. 每一步先等待「上一步到这一步的录制间隔 ÷ 倍速」,再执行手势。2× 只是把等待减半,手势本身的按压 / 滑动时长不变。
  4. 重复次数在点「启动」之前的确认框里定,确认后写回当前脚本(已保存的脚本同步落盘);运行中没有修改轮数的入口,倍速同样只能在「设置」里改,运行态只读展示。
  5. 「暂停」/「继续」只切换回放节奏(暂停在当前步结束后生效);「停止」结束回放并复位到「待运行」,面板仍留在运行态,此时第一个按钮回到「启动」、停止按钮置灰,再点「启动」会重新弹确认框。「返回」在回放中会先弹确认,确认后停止回放并回到编辑态。
  6. 回放中无障碍服务断开、手势被系统取消或提交失败时,会自动暂停并提示原因,不会静默跳过。每执行下一步前都会重新检查无障碍连接。

6.4 脚本管理

编辑态点「文件」打开脚本管理,列出已保存脚本(名称 + 步数,当前脚本带「· 当前」标记):

操作 说明
保存当前步骤 把当前内存中的步骤存为命名脚本(名称最多 16 个字符,与连点器 / 代点器的脚本名同一条规则);同名会先确认覆盖
点击脚本名 加载该脚本;当前有未保存步骤时会先确认覆盖
改名 修改脚本名;新名已存在时会提示
删除 二次确认后删除;删除的是当前脚本时回退到空编辑态(0 步,信息条不显示,「启动」置灰)
恢复草稿 存在未完成草稿时出现,点击后回到准备录制,保留已录步骤

6.5 草稿与切换模块

  • 录制过程中每一步都会自动保存为草稿。切模块、服务被系统回收或 App 重启后,重新打开录点器会弹出「发现未完成的录制」:
    • 继续录制:载入已录步骤并进入准备录制;
    • 稍后处理:只把步骤载入悬浮窗,不开始录制;
    • 丢弃草稿:二次确认后删除。
  • 录制中切换模块会先暂停并保留草稿;切回录点器时由上面的三选一接管,不会自动继续录制。
  • 回放中切换模块会立即停止注入并保存进度;切回时恢复为暂停态,需要点「继续」才接着执行,不会自动操作屏幕。
  • 保存脚本(结束录制 / 脚本管理 / 关闭悬浮窗确认框)时会清理同一脚本的草稿,下次启动不会再提示恢复。

6.6 调节倍速与透明度

「设置」弹框里除了回放倍速,还有悬浮窗透明度滑块(20%~100%)。滑块外观与另外两个模块一致(胶囊轨道 + 白色圆形滑钮),拖动时同样会临时隐藏弹框、在原位置显示百分比进行条,松开后弹框恢复;点「确定」保存,点「取消」或返回键恢复原值。

弹框最底部还有一个红色的「关闭悬浮窗」,和悬浮窗按钮列最后的 × 是同一个入口。

6.7 关闭录点器

  • 编辑态点按钮列最后的「关闭」(或「设置」弹框底部的红色「关闭悬浮窗」):若当前步骤已保存、当前没有步骤,会直接关闭;有未保存步骤时三选一:保存并关闭 / 不保存关闭 / 取消。
  • 回放中关闭会先确认「停止并关闭」。
  • 也可使用通知栏中的「停止」按钮(通知标题为「录点器运行中」)或主界面「关闭悬浮窗」。

7. 数据保存与备份

所有脚本都只存在本机应用私有目录里。应用已关闭系统自动备份(allowBackup=false),脚本中的目标文字、窗口包名、屏幕坐标与模板截图不会随 Auto Backup 或换机迁移上传。

7.1 连点器

  • 命名脚本保存在应用私有 SharedPreferences:clicker_script_config.xml,键为 scripts。
  • 每个脚本包含脚本名与点位列表,点位字段包括:ID、坐标、类型、点击位置、延迟、触摸时长、重复次数、随机距离、滑动对关联(pairId / isStart / 终点坐标)。
  • 悬浮窗不透明度保存在同一 SharedPreferences 的 window_alpha 键中(0.2~1,默认 1),点击 / 滑动点位的不透明度保存在 point_alpha 键中(同范围),与代点器的 window_alpha 独立。
  • 升级前的点位文件 /data/data/<包名>/files/click_points.json 会在首次打开脚本列表时迁移为「默认脚本」,只迁移一次;之后删除该脚本也不会重新导入。
  • 进行中的点位不会自动保存,只有「保存当前点位」后的命名脚本才会落盘。

7.2 代点器

  • 命名脚本保存在应用私有 SharedPreferences:quick_click_config.xml,键为 scripts。
  • 每个脚本包含若干子按钮配置:
    • 名称、类型(文本 / 图像 / 坐标)、目标文字、坐标 X/Y
    • 动作:动作类型(点击 / 双击 / 长按 / 滑动)、随机偏移开关与半径,以及按动作保存的参数(双击间隔;长按时长;滑动方向 / 距离 / 时长)
    • 图像识别额外包含:模板图文件名、相似度阈值、降采样倍率、匹配区域、灰度匹配、重试次数与间隔、框选区域
  • 升级前保存的脚本没有动作字段,读取时会自动按「点击 / 偏移开启 / 半径 5px」补齐并回写一次,按钮行为与升级前一致。
  • 模板图为 PNG,保存在应用私有目录 filesDir/images/,脚本中只记录文件名。
  • 删除脚本、删除图像按钮或更换图片时,会清理不再使用的旧图片。
  • 进行中的按钮列表不会自动保存;只有命名保存后的脚本才会落盘。
  • 悬浮窗不透明度保存在同一 SharedPreferences 的 window_alpha 键中(0.2~1,默认 1)。

7.3 录点器

  • 命名脚本保存在应用私有 SharedPreferences:recorder_config.xml,键为 scripts。每个脚本带版本号、名称、重复次数、录制时的屏幕尺寸 / 方向与步骤列表。
  • 每一步记录类型(点击 / 长按 / 滑动)、坐标、按压或滑动时长,以及「上一步抬起 → 本步按下」的间隔;回放节奏只由这个间隔决定。
  • 回放倍速保存在同一 SharedPreferences 的 speed 键;悬浮窗透明度保存在 window_alpha 键(0.2~1,默认 1)。三个模块的 window_alpha 各自独立。
  • 录制草稿保存在 filesDir/recorder/draft.json:每录一步只更新内存快照,由后台单线程合并写盘(约 250ms 合并一次),暂停 / 停止 / 关闭悬浮窗时立即补写,避免每一步都做文件读写拖慢录制跟手感;保存脚本会清理同一脚本的草稿。
  • 回放现场保存在 filesDir/recorder/session.json,记录当前脚本、进度与倍速;切模块或服务重启后只恢复为暂停态,不会自动注入。
  • 草稿与回放现场都采用「先写临时文件,再原子替换」的方式落盘,避免中途被杀写入半截 JSON。
  • 进行中的录制与未保存步骤不会自动变成正式脚本;录制结束后请选择「保存并结束」,或在脚本管理里「保存当前步骤」。

卸载应用会清除上述所有数据。需要长期保留时,请自行备份导出的 JSON;模板图位于应用私有目录,常规文件管理器无法直接访问。

8. 常见问题

Q1:悬浮窗不显示或主按钮是灰色的

  • 检查是否已授予「显示在其他应用上层」权限。
  • 检查无障碍服务是否处于开启且已连接状态。
  • 国产系统请在权限管理中允许「后台弹出界面」。
  • 尝试关闭悬浮窗后重新启动。

Q2:点击子按钮没有反应

  • 确认无障碍服务仍在运行(部分系统会在息屏或切换应用后自动关闭)。
  • 文本匹配:确认目标文字在当前界面完整可见;先在电脑上执行 adb logcat -s ClickService,未命中时日志会打印窗口包名与该界面的可见文字清单,对照后修改目标文字(详见 5.4)。
  • 图像识别:确认模板图与当前界面一致,且目标没有被弹窗遮挡。
  • 坐标点击:确认坐标在当前屏幕范围内;横竖屏切换或分辨率变化后需重新取点。

Q3:图像识别提示「截图失败」

  • 图像识别需要 Android 11 及以上。
  • 升级安装后请到无障碍设置中关闭再重新开启本应用的服务,让 canTakeScreenshot 能力生效。
  • 部分系统会限制无障碍截图,可尝试重启无障碍服务。

Q4:提示「未匹配到目标图片」

  • 重新截图/选图,确保模板只包含目标且没有动态内容(时间、进度、动画)。
  • 适当降低相似度阈值。
  • 确认模板方向与当前屏幕一致(横竖屏)。
  • 如果开启了「仅上次框选区域」,确认目标仍在区域附近,或改为全屏搜索。
  • 界面颜色差异较大时开启灰度匹配;如果颜色是唯一区分特征,则关闭灰度匹配。

Q5:提示「模板图片缺失,请重新编辑选择」

  • 模板图文件已被清理(例如删除过脚本、换过图),或脚本是从其他设备拷贝来的。
  • 重新进入编辑弹框,重新截图或从相册选图即可。

Q6:截图框选页 / 屏幕取点页怎么取消

  • 这两个页面没有取消按钮,按系统返回键即可退出并回到新建/编辑弹框。
  • 在相册选择页或相册裁剪页按返回键,也会回到弹框,不会关闭弹框。

Q7:配置弹框里点输入框不弹键盘

  • 本应用已针对悬浮窗弹框处理软键盘;如果仍不弹出,先收起键盘再点一次输入框,或关闭弹框重新打开。
  • 部分输入法在悬浮窗场景下需要切换为系统默认输入法。

Q8:脚本管理里没有找到之前的按钮

  • 悬浮窗上正在编辑的按钮 / 点位不会自动持久化。
  • 代点器请确认之前是否点击过「保存当前按钮」并命名;连点器请确认是否在「悬浮窗设置」中点过「保存当前点位」。
  • 录点器请确认结束录制时选择了「保存并结束」,或在脚本管理中点击过「保存当前步骤」;若只是中断了录制,步骤会留在草稿里,重新打开录点器时选「继续录制 / 稍后处理」即可找回。
  • 连点器从旧版本升级后,原来的单份点位会出现在名为「默认脚本」的列表项里,只迁移一次。
  • 加载脚本时若悬浮窗已有内容,会先弹覆盖确认。

Q9:提示「手势被系统取消」或「手势提交失败」

  • 「手势被系统取消」:目标应用或系统安全策略拦截了模拟手势,可尝试关闭目标应用的「防误触 / 安全输入」保护,或更换目标界面。
  • 「手势提交失败,请到系统设置检查无障碍服务」:无障碍服务已断开或被系统拒绝,重新开启无障碍后主按钮会恢复可用。
  • 连点器运行中遇到上面两种情况会自动停止整轮连点并给出提示,不会带着断掉的通道把剩余点位一路点空;重新开启无障碍后需再次点「启动」。
  • 调试日志(目标文字、窗口包名、屏幕坐标)只在 debug 包输出,正式包不会再把这些内容写进系统日志。

Q10:点击后悬浮窗挡住目标

  • 手动把悬浮窗拖到屏幕边缘,松手会自动吸附:竖排贴左 / 右,横排或横屏折叠态贴上 / 下,另一个方向保留你拖到的位置。

Q11:点击关闭(X)时提示「当前有未保存的按钮」

  • 说明当前的按钮列表有新增、修改或删除尚未保存为脚本。选「保存并关闭」会先保存再关闭;选「不保存关闭」会丢弃这些改动。
  • 如果按钮是从脚本管理加载且之后没有改动,关闭时不会弹出该提示。

Q12:点击「启动悬浮窗」后 App 闪退(提示 Unable to create service)

  • 这是 Android 14 及以上系统的强制要求:前台服务必须声明与 foregroundServiceType 匹配的类型权限。
  • 请升级到最新版本;旧版本在 Android 14 / 15 / 16 上会因缺少 FOREGROUND_SERVICE_DATA_SYNC 权限而无法启动悬浮窗。

Q13:通知栏看不到「连点器运行中」通知

  • Android 13 及以上需要用户授权通知。首次点击「启动悬浮窗」时会弹出授权框,选择「允许」即可。
  • 拒绝授权不影响悬浮窗运行,只是通知栏里的「停止」按钮不可见;可到系统「应用管理 → 通知」中开启。
  • 录点器的通知标题是「录点器运行中」,代点器的通知标题是「悬浮快捷点击运行中」,都带「停止」按钮。

Q14:悬浮窗运行一段时间后自动消失

  • Android 15 及以上对 dataSync 类型前台服务有 6 小时 / 24 小时的时长上限,达到上限后系统会停止悬浮窗服务(应用不会闪退)。
  • 需要长时间连续运行的话,请分批使用,或缩短单次运行时长。

Q15:录点器点了「录制」,但操作没有被记录

  • 点「录制」后先出现的是准备条,还需要点小条上的「开始」才会真正开始记录。
  • 小条只有左侧 ≡ 把手和右侧两个按钮能点,点在标题 / 说明文字上是特意设计成穿透的:准备态会操作到下面的应用,录制态则被忽略(不记步)。
  • 如果处于暂停态,捕获层会让出触摸,此时操作不会被记录;点「继续」后才会继续录。
  • 状态栏、底部导航栏以及系统安全界面(密码输入、支付确认等)的触摸不会记录,请避开系统栏与安全界面。
  • 单次最多 500 步,达到上限会自动暂停。

Q16:回放节奏和录制时不一样

  • 先确认「设置」里的回放倍速:2× 表示把每一步的等待时间减半,0.5× 表示等待加倍;手势本身的按压 / 滑动时长不受倍速影响。
  • 录制时点过「暂停」的时长不会计入步骤间隔,切模块或服务重启造成的间隔也不会算进去。
  • 回放时如果中途暂停再继续,暂停时长同样不计入下一步的等待。

Q17:切换模块后,录点器的录制 / 回放进度还在吗

  • 录制进度会以草稿形式保留,切回录点器时弹「发现未完成的录制」,可选择继续录制、稍后处理或丢弃。
  • 回放进度会以现场形式保留,切回后是暂停态,需要点「继续」才接着执行,不会自动操作屏幕。
  • 保存脚本后同一脚本的草稿会被清理,避免下次启动重复提示恢复。

Q18:横竖屏切换后悬浮窗跑到屏幕外或消失

  • 三个模块都已适配:切换方向后悬浮窗会自动重排并夹回屏幕可见区域,不会留在屏幕外。
  • 横屏高度放不下竖向按钮栏时,连点器 / 代点器自动改为横向一排,录点器横屏展开同样改为横排(主按钮固定在首位、信息条与操作按钮依次排在后面);横屏下按钮条与折叠按钮都改为贴屏幕的上 / 下边缘(水平位置保留,不会强制靠右),仍不会压住状态栏、导航栏或挖孔。屏幕两个方向都放不下时会提示旋转设备,而不是静默裁掉。
  • 点击点、滑动通道与录制小条同样会重新钳制;如果仍看到异常,请先关闭再重新启动悬浮窗。

Q19:录制时操作感觉有点延迟 / 一卡一卡的

  • 这是录制方式的固定开销,不是手机坏了:录制时所有触摸先由全屏捕获层吃掉,再用无障碍手势「重放」给下面的应用,所以应用收到操作会比手指晚几十毫秒,滑动也是按录制下来的轨迹重放。
  • 当前版本已经把回显等待压到约 24ms,草稿改为后台合并写入(不再每次抬手都写磁盘),落点圆环也只重绘自己那一小块,点按跟手感比之前好很多。
  • 如果快速连点时偶尔觉得某一下「慢半拍」,多半是那一下的回显还没结束;放慢一点点节奏即可,录制的步骤本身不会丢。

Q20:在代点器的子按钮上滑动 / 长按,能作用到下面的应用吗

  • 运行态(非编辑态)可以。点在子按钮上仍然是「点击 = 执行按钮配置的动作」;但如果按住不动超过约 0.5 秒,或手指明显移动,这段操作会被回放给按钮下面的应用,被按钮遮住的那块区域照样能长按、能滚动。
  • 主按钮不参与:在总按钮上长按 / 滑动仍然是展开、折叠和拖动窗口。
  • 两个已知差异:滑动是抬手之后才整段回放,手指移动时不会实时跟手;长按是达到阈值后注入一次 0.8 秒的按压,所以下层应用会晚约 0.5 秒才响应,而且「长按后继续拖动」还原不了。
  • 只支持单指,双指放大 / 捏合等多点操作不会透传;进编辑态(点总按钮两下)后子按钮恢复为编辑 / 拖动排序,不会透传。
  • 透传进行中悬浮窗会短暂变成不可点击(约几十毫秒到 1 秒),这是正常现象,结束后自动恢复;如果提示「手势被系统取消」,重新试一次即可。

9. 注意事项

  • 本应用仅限个人学习与日常辅助使用,请勿用于违反服务条款或法律法规的场景。
  • 部分应用会检测并阻止自动化点击,可能表现为点击无效或弹窗提示。
  • 图像识别与连续点击会占用一定性能,建议避免长时间高频率运行。
  • 无障碍服务可以读取界面内容并模拟手势,请仅在可信设备上开启。
  • 系统升级、应用更新或修改无障碍设置后,建议重新检查权限与服务状态。