--- title: 实施规格书_飞舟脚本_2026-10-13 --- # 飞舟脚本 App · 实施规格书 > 配套设计文件:https://ardot.tencent.com/file/734917825641912\ 版本:2026-10-13 · 适用于把本设计交付给编码 AI / 开发执行\ **本文档是"可执行规格",画布只是视觉参考。有冲突时以本文档为准。** --- ## §0 怎么用这份文档 - **先填 §7 技术栈** —— 不填则 §3 的字段控件类型无法映射,开发只能猜。 - §1 是页面边界(**特别注意 C1–C5 是同一个页面**)。 - §2 是导航与状态机 —— 决定跳转与互斥,必须先实现。 - §3 是字段清单,§4 是交互规则,§5 是必须替换的假数据。 - §6 是设计令牌,直接落成主题变量。 - §9 列出了**已知的不一致与待确认项**,开工前先过一遍。 --- ## §1 页面清单(画板 → 页面/状态映射) 底栏只有 **3 个 tab**:`任务` / `记录` / `我的`。 | 编号 画板名 节点 ID 类型 归属 | A1 卡密登录 `16:257` 独立窗口(**无底栏**) 启动入口 | A2 卡密登录 · 校验中 `16:1491` A1 的**加载态** 同一页 | A3 卡密登录 · 校验失败 `16:288` A1 的**错误态** 同一页 | A4 权限引导弹窗 `30:738` 弹窗 叠在 **B1** 上 | B1 任务列表 `30:102` **一级页** 任务 tab · 默认落点 | B2 任务列表 · 运行中 `30:203` B1 的**运行态** 同一页 | C1 ID提取 `3:1` **二级页** 任务 › ID提取 · **首屏** | C1r ID提取 · 运行中 `16:138` C1 的**运行态** 同一页 | C2 ID提取 · 脚本二三 `16:483` C1 的**第 2 屏(滚动位置)** 同一页 | C3 ID提取 · 脚本四 `16:589` C1 的**第 3 屏** 同一页 | C4 ID提取 · 功能设置 `16:706` C1 的**第 4 屏** 同一页 | C5 ID提取 · 功能设置(滚到底) `16:965` C1 的**底部** 同一页 | C6 UID私信 `3:534` 二级页 任务 › UID私信 | C7 UID私信 · 脚本一展开 `7:11` C6 的**展开态** 同一页 | C8 养号 `3:469` 二级页 任务 › 养号 | C9 视频功能 `3:629` 二级页 任务 › 视频功能 | D1 记录列表 `30:871` **一级页** 记录 tab | D2 记录空态 `30:958` D1 的**空态** 同一页 | D3 运行详情 `30:1241` D1 的**二级页** 记录 › 单次运行 | E1 我的 `7:289` **一级页**(可滚动) 我的 tab | E2 我的 · 解绑确认 `16:850` 弹窗 叠在 E1 上 | F1 ID提取 · 未选脚本 `16:23` 弹窗 叠在 C1 上 | F2 ID提取 · 权限拦截 `16:319` 弹窗 叠在 C1 上 | F3 切换任务确认 `30:1005` 弹窗 叠在 B2 上 | F4 ID提取 · 运行中卡密到期 `16:1360` 弹窗 叠在 C1r 上 | F5 脚本报错 `30:1119` C1r 的**报错态** + 弹窗 同一页 | H1 悬浮球 · 空闲(收起) `34:9` **全局悬浮窗** 浮于**其他应用**之上 | H2 悬浮球 · 空闲(展开) `34:23` 同上 · 扇形展开 同一组件 | H3 悬浮球 · 运行中(展开) `34:37` 同上 · 运行态 同一组件 | H4 悬浮球 · 报错(收起) `34:53` 同上 · 报错态 同一组件 | H5 悬浮球 · 停止二次确认 `34:121` 弹窗 叠在 H3 上 | H6 悬浮球 · 退出二次确认 `34:173` 弹窗 叠在 H2 上 | H7 悬浮球 · 拖到右侧(扇形镜像) `34:223` 同一组件 · **镜像布局** 位置变体示意(见 §10.11) ### ⚠️ 最重要的一条 **C1 / C1r / C2 / C3 / C4 / C5 是同一个「ID提取」页面的 6 个采样点**,不是 6 个页面。\ ID提取 是一个**可滚动的长页面**:脚本选择(脚本一~四)→ 功能设置(14 项)。\ C2–C5 只是把它滚动到不同位置时的样子。 ### 实际需要实现的页面只有 5 个 + 3 个 tab + 1 个全局悬浮窗 - 卡密登录(A1/A2/A3 三态) - 任务列表(B1/B2 两态) - 任务详情(4 种:ID提取 / UID私信 / 养号 / 视频功能)—— ID提取 最长,可滚动 - 运行记录(D1/D2 两态 + D3 详情) - 我的(E1,可滚动) \\+ **H 组悬浮球**(一个常驻的全局悬浮窗,浮在所有应用之上)—— 详见 **§10** --- ## §2 导航与状态机 ### 2.1 启动与卡密 ``` 启动 → 读本地卡密 ├─ 无卡密 / 已过期 → A1 卡密登录 └─ 有效 → B1 任务列表 A1 ──点「登录激活」→ A2(按钮转「登录中…」+ 转圈,禁用防重复点) ├─ 校验失败 → A3(输入框变玫瑰色 + 下方红字提示,仍停在 A1) └─ 校验成功 → 检查权限 ├─ 缺权限 → A4 权限引导弹窗 └─ 权限齐 → B1 ``` ### 2.2 一级 / 二级导航 ``` B1 任务列表 ──点任务卡主体──→ 对应二级页(C1/C6/C8/C9) 二级页 ──点「← 返回」──→ B1 B1/B2/D1/D2/D3/E1 ──点底栏──→ 三个 tab 互切 D1 记录列表 ──点任一条目──→ D3 运行详情 D3 ──点「← 返回」──→ D1 ``` ### 2.3 全局运行状态机(**全局单跑**) ``` 空闲(idle) │ │ 发起运行(前置校验全通过) ▼ 运行中(running)────────────────────────────┐ │ │ ├─ 正常跑完 → 完成(success) │ ├─ 点「停止运行」 → 手动停止(stopped) │ 点别的任务「运行」 ├─ 卡密到期 → 弹 F4 → 回 A1 ├→ 弹 F3 确认 ├─ 脚本报错 → 弹 F5(可看日志) │ └「停止并开始」→ 停旧的,起新的 └─ 权限被关闭 → 归入「报错中断」 │ ──┘ 所有结束 → 回到「空闲」,并**写入 D1 一条记录** ``` **互斥规则**:任何时刻**只允许一个脚本在运行**(跨任务也互斥)。 运行中,其他任务的「运行」按钮**仍然可点**,点击后弹 F3 确认,不做禁用。 运行中,**不允许**在同一运行中切脚本 —— 必须先停。 ### 2.4 全局运行条 位置:**顶部**,状态栏下方(`x=20, y=70, w=335, h=44`) 显示条件:**仅「运行中」时出现**;空闲/完成时**整条隐藏**(不占高度) 内容:`● {任务名} · 脚本X · 运行中` + 右侧等宽字体计时 报错态(F5):整条变**玫瑰红**,文案 `脚本一 · 执行出错已停止`,右侧 `已终止` 交互:点击整条 → 跳回**运行中的那个任务**的详情页 职责分工:**运行条 = 状态与导航;页面底部 CTA = 启停控制**。运行条上**不放停止按钮** ### 2.5 运行前置校验顺序 点「开始运行」时,按此顺序校验,**任一步不过就拦截**: - 卡密有效? → 否:不做提示,**直接回 A1** - 无障碍 + 悬浮窗权限齐? → 否:弹 **F2** - 已选脚本? → 否:弹 **F1** - 已有脚本在运行? → 是:弹 **F3**;否:直接启动 --- ## §3 字段表 ### C1 ID提取 · 脚本选择 | 字段 控件 默认值 校验 / 备注 | 脚本一 ~ 脚本四 **单选圆点** 脚本一 选中 同一时间仅可运行一个;页面内有说明「单选:同一时间仅可运行一个脚本」 | 自定关注或粉丝页面提 ID 复选框 ✓ 脚本一展开项 | 自定页面提 ID 复选框 ✗ | 主播去重 复选框 ✓ | ├ 去重模式 下拉 `ID 模式` | └ 进入页面 下拉 `粉丝页` | 主播 ID 输入 `ID1#ID2#ID3` 多个用 `#` 分隔 | 使用文本 ID 复选框 + 文件选择 ✗ 路径框**右对齐**;按钮「选择」 | 底部提示 文案 `↓ 下方还有「功能设置」,向下滚动查看` > 脚本二/三/四的展开内容见 C2、C3。 ### C2 ID提取 · 脚本二 / 脚本三(展开态) **脚本二 · 评论页提 ID** | 字段 控件 默认 | 自定评论页面提 ID 复选框 ✓ | 提取评论的人的粉丝 ID 复选框 ✗ **脚本三 · 文本 UID 裂变提 ID** | 字段 控件 默认 | 文本 UID 裂变提 ID 复选框 ✗ | UID 博主去重 复选框 ✓ | 进入页面 下拉 `关注页` | 裂变文本 输入 + 按钮 路径框右对齐 / 按钮「选择」 **当前脚本提示条**:`当前脚本:自定评论页面提 ID`(居中、浅色底) ### C3 ID提取 · 脚本四(展开态) | 字段 控件 默认 | 关键词视频提 ID 复选框 ✗ | 关键词主播 输入 `关键词` | 关键词提取主播粉丝 ID 复选框 ✗ | 关键词提取评论区 ID 复选框 ✗ | 关键词提取评论的人的粉丝 ID 复选框 ✗ ### C4 ID提取 · 功能设置(14 项,C2/C3/C5 共用同一张卡) | # 字段 控件 默认值 备注 | 1 过滤私密账户 复选框 ✓ | 2 过滤无头像账户 复选框 ✓ | 3 提取区域 输入 + 按钮 `国家简码:JP#TW#US` / 按钮「含对应区域ID条款」 说明两行见下 | — (说明) 文案 `国家简码:如日本填 JP;台湾:TW,多国则用 # 隔开` | — (说明) 文案 `如:JP#TW#CN#US,不填则匹配所有国家` | 4 语言区域 下拉 `通杀` | 5 昵称个签检测 下拉 `通杀` | 6 云端去重 复选框 + 输入 + 按钮 ✓ / `表名:字符` / 按钮「连通测试」 | 7 AI 头像识别 复选框 ✓ | 8 AI性别 下拉 `男` | 9 AI 年龄 > 输入 `20` | 10 关注量 **区间输入(双框)** `0` ~ `500000` 数字居中,框宽 56px | 11 粉丝量 区间输入 `0` ~ `500000` | 12 获赞量 区间输入 `0` ~ `500000` | 13 视频量 区间输入 `0` ~ `500000` | 14 提取符合 输入 + 后缀文案 `0` + `个 ID 后停止` ### C6 UID私信 | 分组 字段 控件 默认 | 脚本选择 脚本一 · 已提 UID 私信 单选 ✓ | 脚本二 · 自己粉丝私信 单选 ✗ | 功能设置 AI 性别 下拉 `男` | 关注数量 区间输入 `100` ~ `200` | 私信数量 区间输入 `20` ~ `30` | 休息时间(秒) 区间输入 `100` ~ `500` | 私信 / 评论设置 随机私信文本 文件选择 按钮「选择文件」 | 随机评论文本 文件选择 按钮「选择文件」 ### C7 UID私信 · 脚本一(展开态) | 分组 字段 控件 默认 | 脚本一(展开) UID 私信 复选框 ✓ | 筛首视频日期 下拉 `7 天内` | 首视频点赞 / 首视频评论 开关 `都执行` | 已筛符合的 UID 文本 输入 + 按钮 路径框右对齐 / 按钮「选择」 | 功能设置 进行关注 / 进行私信 开关 `开启` | 关注数量 区间输入 `100` ~ `200` | 私信数量 区间输入 `20` ~ `30` | 去重方式 下拉 `关注+私信去重` ### C8 养号 | 分组 字段 控件 默认 | 脚本选择 随机操作养号 单选(已选) ✓ | 养号参数 浏览时长(分钟) 区间输入 `3` ~ `8` | 点赞概率 下拉 `30%` | 评论概率 下拉 `10%` | 关注概率 下拉 `15%` | 单次操作 区间输入 `10` ~ `30` | 底部提示 文案 — `随机浏览、点赞、评论模拟真实活跃度` ### C9 视频功能 | 分组 字段 控件 默认 | 脚本选择 关键词视频功能 单选(已选) ✓ | 功能设置 关键词 输入 `搜索` | 主播区域 输入 `国家简码` | 停止个数 区间输入 `1` ~ `5` | 间隔时间(秒) 区间输入 `20` ~ `20` | 执行操作 4 个开关胶囊 关注 开 / 私信 开 / 点赞 关 / 评论 关 | 私信 / 评论设置 随机私信内容 1-3 文件选择 按钮「选择文件」 | 随机评论内容 1-3 文件选择 按钮「选择文件」 ### B1/B2 任务列表 | 字段 说明 | 页面标题 `飞舟脚本` / 副标题 `TikTok 自动化脚本 · 选择任务` | 区标题 `任务` + 说明 `全局单跑:同一时间仅可运行一个脚本` | 任务卡 ×4 图标 · 任务名 · **状态徽标** · 当前脚本 · 上次运行 · 「运行」按钮 **状态徽标取值**:`空闲`(灰) / `运行中`(绿) / `未配置`(琥珀)\ **任务卡副文案**: ID提取 → `当前:脚本一 · 粉丝页提 ID` / `上次 10:24 · 提取 128 个 ID` UID私信 → `当前:脚本一 · 已提 UID 私信` / `上次 09:58 · 私信 30 人` 养号 → `当前:随机操作养号` / `上次 09:12 · 运行 6 分钟` 视频功能 → `当前:关键词视频功能` / `还未运行过` ### D1/D3 运行记录 | 字段 说明 | D1 区标题 `运行记录` + `共 3 条 · 点任一条查看执行日志` | 记录条目 图标 · `{任务} · {脚本}` · **结果标签** · 时间行 · 结果行 · 右箭头 | **结果标签取值** `已完成`(绿) / `手动停止`(灰) / `报错中断`(玫瑰红) | D3 摘要卡 任务名 · 结果标签 · `时间 · 耗时 · 结果量` · 结果文件名 + 「打开」「分享」 | D3 日志卡 标题「执行日志」+「复制」按钮 + 等宽字体日志行 | **日志级别配色** `INFO` 灰 / `WARN` 琥珀 / `ERROR` 玫瑰红 ### E1 我的 | 分组 字段 控件 值 | 卡密 卡密状态 标签 `已登录`(绿) | 卡密到期时间 只读值 + 提醒标签 `2026-12-31 23:59` + `即将到期`(琥珀) | 解绑卡密 按钮 `解绑`(玫瑰色) | 应用 TikTok 客户端(未安装态) 标签 + 按钮 `未安装`(灰)+「下载」 | TikTok 客户端(已安装态) 标签 + 按钮 `已安装 v39.5.4`(绿)+「更新」 | 关于 脚本版本 只读值 `2026.10.10` | 更新日志 按钮 `查看` | 检查更新 标签 `已是最新`(绿) > ⚠️ 「应用」区两行是**互斥状态对照**,运行时按安装状态**只渲染一行**。 ### 弹窗文案(A4 / F1–F5 / E2) | 编号 标题 说明 按钮 | A4 `需要开启权限` `为正常执行脚本,请先授予以下权限` 权限 3 行(无障碍 已开启 / 悬浮窗 未开启 / **通知 未开启(可选)**)+「去授权」+「稍后再说」 | F1 `无法开始运行` `请先选择要运行的脚本` 「知道了」 | F2 `无法开始运行` `无障碍与悬浮窗权限未开启,脚本无法执行` 权限 3 行 +「去授权」+「稍后再说」 | F3 `{任务名}正在运行` `开始 {目标任务} 将先停止当前脚本(全局单跑)` 「取消」+「停止并开始」 | F4 `正在运行的脚本已停止` `卡密已到期,需重新登录后继续使用` + 小字 `确认后将返回卡密登录界面` **仅「确认」** | F5 `脚本执行出错` `无障碍服务被关闭,脚本已停止运行` 「查看日志」+「知道了」 | E2 `确认解绑卡密?` `解绑后需重新输入卡密才能使用` / `正在运行的脚本将立即停止` 「取消」+「确认解绑」(玫瑰色) > A4 与 F2 结构完全一致,仅标题/说明/权限初始状态不同,**可复用同一组件**。 --- ## §4 交互规则清单 | # 触发 行为 | 1 启动且无有效卡密 **自动跳 A1**,不弹提示 | 2 运行中卡密到期 弹 F4 → 点「确认」→ **自动回 A1** | 3 E1 点「解绑」 弹 E2 → 「确认解绑」→ **自动回 A1** | 4 点「开始运行」 按 §2.5 顺序校验,不过则拦截 | 5 运行中点其他任务「运行」 弹 F3;「停止并开始」→ 先停旧再起新。**按钮不禁用** | 6 运行中切换任意页面 顶部运行条**始终可见**(它是全局组件) | 7 点运行条 跳回运行中的任务详情页 | 8 脚本报错 运行条变红 + 弹 F5;点「查看日志」→ D3 | 9 全局互斥 任何时刻仅一个脚本运行(跨任务) | 10 记录条目点击 进 D3 | 11 「我的」页内容超出 **页面可滚动**(底部渐隐 + 右侧滚动指示条) | 12 ID提取 / 功能设置页内容超出 **可滚动**(同上) | 13 脚本卡点击 展开/收起配置项(箭头方向随之变化) | 14 二级页「← 返回」 回 B1 | 15 所有运行结束 写一条 D1 记录(含结果分类) --- ## §5 占位值替换表(**必须替换,否则会写死假数据**) | 位置 当前占位值 需替换为 | E1 · 软件/脚本版本 `2026.10.10` 真实脚本版本号规则 | E1 · 卡密到期时间 `2026-12-31 23:59` 真实到期时间(来自卡密接口) | E1 · TikTok 已安装版本 `v39.5.4` 真实适配版本 / 运行时读取 | C1 · 主播 ID 示例 `ID1#ID2#ID3` 真实示例或留空提示 | C4 · 提取区域 `JP#TW#US` / `JP#TW#CN#US` 真实默认值 | C4/C2/C3/C6/C7/C8/C9 · 所有区间值 `0~500000` / `100~200` / `20~30` / `100~500` / `3~8` / `10~30` / `1~5` / `20~20` 真实默认值与上下限 | C4 · AI 年龄 `20` 真实默认 | C4 · 提取符合 `0` 真实默认 | B1 · 任务卡「上次…」 `上次 10:24 · 提取 128 个 ID` 等 读取真实历史记录;无记录显示 `还未运行过` | D1/D3 · 记录与日志 3 条示例 + 6 行日志 真实运行记录;日志为**脚本真实输出流** | D3 · 结果文件名 `uid_20261013.txt` 真实产物文件名规则 | A1 · 卡密输入框示例 校验失败态里的 `TK9F-2A7C-8E10-4B55` 仅演示用,不要预填 --- ## §6 设计令牌 ### 颜色 | 用途 值 | 页面底色 `#030014` | 卡片底 `#FFFFFF` @ 4%(部分 6%) | 卡片描边 `#FFFFFF` @ 8% | 弹窗底 / 描边 `#17142B` / `#FFFFFF` @ 12% | 底栏底 `#0A0A17` @ 96% | 主色(渐变) `#2EA7FF` → `#9381FF` | 主色(单色) `#2EA7FF`(激活/链接 `#7CC7FF`) | 成功 / 运行中 `#13DDC4` | 警告 / 未配置 / 即将到期 `#F5C24B` | 危险 / 报错 / 解绑 `#FF5470` | 次要紫 `#9381FF` | 主文字 `#FFFFFF` | 正文文字 `#CFCCE6` / `#E6E4F5` | 次要文字 `#9A97B8` / `#8E8BA8` | 弱提示文字 `#6F6C8A` ### 字体 | 用途 字体 / 字号 | 中文 `Noto Sans SC` | 数字 / 设备号 / 日志 `JetBrains Mono` | 状态栏时间 `Inter` | 页面标题 22px / SemiBold | 二级页返回头标题 21px / SemiBold | 弹窗标题 18px / SemiBold | 区标题 / 任务卡标题 16px / 15px SemiBold | 设置名 / 正文 13px Regular | 标签 / 说明 / 提示 11–12px ### 尺寸与圆角 | 元素 规格 | 画板 375 × 812 | 状态栏 高 62(**系统绘制,不要实现**) | **全局运行条** `x=20, y=70, w=335, h=44`,圆角 12 | **返回头** 高 44,返回热区 44×44,圆角 — | **底栏** 高 83 = 页签行 49 + 安全区 33 | 底栏页签图标 22×22 | 内容区(空闲) `y=62, h=595` | 内容区(运行中·有 CTA) `y=126, h=531` | 内容区(运行中·无 CTA) `y=126, h=591` | 主 CTA `x=20, w=335, h=48`,圆角 99 | 卡片 圆角 16 / 14,内边距 14–16 | **区间输入框** 单框宽 **56**,数字**居中** | 文件路径输入框 内容**右对齐** | 底部渐隐 `y=577, h=80` | 滚动指示条 `x=367, w=3`,圆角 99 ### 触控标准 **新组件(任务卡、记录条目、返回头、运行条)按 44pt 实现**(如运行按钮 68×44、返回热区 44×44)。 ⚠️ **既有控件(设置行、胶囊)视觉仍是 26px** —— 建议实现时**视觉保持紧凑、热区用透明 padding 撑到 44px**(§9 有记录)。 ### 图标 线性图标,`stroke-width` 1.6,圆角端点,`viewBox 0 0 24 24`。\ 底栏三图标:任务=圆角方框+勾 / 记录=时钟 / 我的=人像。 ### 品牌图标(FluxRpa) 源文件目录 `E:\渡梦星舟\飞舟图标\`(同一图标的多尺寸,角标数字为圆角半径): | 文件 尺寸 圆角 本设计中的用途 | `FluxRpa_64_13R.png` 64 13 不采用(清晰度不足) | `FluxRpa_128_29R.png` 128 29 不采用(清晰度不足) | `FluxRpa_256_58R.png` 256 58 备用(原方案给球体用,已被去字标版取代) | **`FluxRpa_512_114R.png`** **512** 114 ✅ **登录页 Logo 72×72**(72dp @4x = 288px,仅 512 够) | **`FluxRpa_mark_only_412.png`** **412** — ✅ **全局悬浮球 Ø48** —— **去字标版**,见下 **「去字标版」怎么来的(可复现)** 从 `FluxRpa_512_114R.png` 派生的球体专用图,处理三步: - 透明像素填白(保留图标白底观感); - **抹掉字标**:实测标记与 `FLUXRPA` 字标的分界在 **y = 331**(该行彩色像素数为 0,是干净的空隙),\ 331 行以下全部填白; - 以标记 bbox(`76,96–435,330`,宽 360 高 235,中心 `255.5,213`)为中心做**正方形裁切**,\ 边长取「**内容最大半径 192.3px ÷ 0.94 × 2 ≈ 410**」→ 取 **412**,使任何内容点都不被圆形裁切到。 > 效果:标记从占球直径 **70% → 87.4%**(放大 25%),且 **Ø48 下不再有 6px 的字标噪点、四角不被裁**。\ 已交付:`品牌资产/FluxRpa_mark_only_412_悬浮球去字标版.png`(412×412,白底)。 **实际用途一览(共 9 处)** | 位置 节点 尺寸 用图 圆角 | A1 / A2 / A3 登录牌 `16:275` / `16:1513` / `16:309` 72×72 `FluxRpa_512`(**完整图标**,字标在 72px 下清晰) 16(= 114/512×72) | H1–H7 悬浮球 `34:18` / `34:32` / `34:48` / `34:64` / `34:124` / `34:175` / `34:225` Ø48 `mark_only_412`(**去字标**) 99(**圆形裁切**) > 登录页保留**完整图标**(含字标):72px 下字标约 12px 高,可读,且登录页需要完整品牌署名。\ 悬浮球用**去字标版**:48px 放不下字标,且球是常驻控件,越简洁越好。 --- ## §7 技术栈(**开工前必填**) | 项 值 | 运行形态 ☐ Android 原生(Compose / View) ☐ WebView + H5 ☐ AutoX.js `ui` 模块 ☐ 其他:\_\_\_\_ | 目标 TikTok 版本 \_\_\_\_ | 卡密校验接口 \_\_\_\_(地址 / 方法 / 请求体 / 返回结构 / 错误码) | 权限申请方式 无障碍:跳系统设置?悬浮窗:`ACTION_MANAGE_OVERLAY_PERMISSION`? | 脚本执行与日志回传 AutoX 事件/回调 结构 \_\_\_\_ | 记录与配置的本地存储 \_\_\_\_(SQLite / JSON / MMKV) | 结果文件落点 \_\_\_\_(目录 / 命名规则 / 是否需上传) | 更新检查接口 \_\_\_\_(软件更新 / 脚本更新) | TikTok 客户端下载源 \_\_\_\_ --- ## §8 分批实施顺序(建议) | 批次 内容 验收 | **第 1 批 · 静态壳** A1–A4、B1/B2、C1–C9、D1–D3、E1/E2、F1–F5 的页面与导航 + §6 令牌 能点着走完全部页面,视觉对齐画布 | **第 2 批 · 状态与规则** §2.3 全局状态机、§2.5 前置校验、§4 全部 15 条交互、5 类弹窗触发 每种状态都能触发到;互斥不破 | **第 3 批 · 业务** 卡密校验(A2/A3)、真实权限申请、脚本执行 + 日志流、结果文件落点、记录持久化 真机跑通一个完整任务 **每批完成后先出静态预览确认,再进下一批。** --- ## §9 已知不一致与待确认项(开工前先过一遍) | # 问题 建议 | 1 **C6 与 C7 的「功能设置」字段集不同**:C6 是 `AI 性别 / 关注数量 / 私信数量 / 休息时间`,C7 是 `进行关注·进行私信 / 关注数量 / 私信数量 / 去重方式` 同一页不应有两套,需**二选一统一**(我倾向以 C7 为准,C6 补上开关与去重方式) | 2 **C1–C5 未在画布上加分组标注** 本规格书 §1 已说明;画布如需标注可另补 | 3 **触控目标**:既有控件视觉高 26px \ 实现时热区撑到 44;若要视觉也放大需重排版式 | 4 **E1 / 多个二级页内容余量很小**(E1 空闲态约 548/595) 运行中加运行条后余量更紧;已加底部渐隐,实现时按**可滚动**处理 | 5 **未激活页签旧色 `#7A7794` 对比度 4.4:1** 未达 WCAG AA 已统一改为 `#8E8BA8`(5.6:1),实现时用新值 | 6 **B1 任务卡的「上次运行/结果量」需要数据来源** 依赖任务层提供统计字段,需在 §7 里明确 | 7 悬浮球 Ø48 上字标仅约 6px、四角被圆裁 **已解决**:球体改用**去字标版**(标记放大到球直径 87.4%)。登录页仍用完整图标(72px 下字标清晰),见 §6 品牌图标 | 8 **报错态是否该在球内放警示三角** 已统一为**只换外环颜色**(红环),球内保持品牌图标 —— 与"图标恒定"规则一致 | 7 **多脚本并行不支持**(设计上就是全局单跑) 若未来要支持队列,需重新设计状态机 | 8 **D3 日志的长列表** 日志可能很长,需虚拟滚动;已设计「复制」按钮 --- ## §10 悬浮球(H 组 · 全局悬浮窗) **定位**:浮在所有应用之上(含 TikTok),是**跨 App 唯一的控制入口与运行状态可视处**。\ **App 前台也显示**(用户已确认)。 ### 10.1 默认位置与尺寸 | 项 值 | 默认位置 **屏幕左侧**,左边距 12,**垂直居中** → 球心 `(36, 406)` | 球体 **Ø48**(透明热区 64),圆角 99;填充 = **FluxRpa 应用图标**(圆形裁切) | 不透明度 **1.0**(三态统一。球内是图片,半透明会发灰;状态一律靠外环表达) | 扇形半径 **R = 96** | 子按钮 Ø48,圆角 99 | 扇形夹角 **60° / 20° / −20° / −60°**(以球心为原点,**向右**展开) | 标签胶囊 高 24、圆角 99、距按钮右侧 4px、11px 字 | 展开动画 180ms ### 10.2 按钮坐标(相对屏幕,可直接落码) | # 按钮 球心 按钮左上角 标签左上角 / 宽 | 1 运行 / 停止 (84, 322.9) (60, 299) (112, 311) / 38 | 2 回到 App (126.2, 373.2) (102, 349) (154, 361) / 59 | 3 隐藏悬浮球 (126.2, 438.8) (102, 415) (154, 427) / 71 | 4 退出应用 (84, 489.1) (60, 465) (112, 477) / 60 计算式:`按钮中心 = 球心 + R·(cosθ, −sinθ)`(屏幕坐标 y 向下,故取负 sin) ### 10.3 扇形里的四个按钮 | # 按钮 图标 样式 二次确认 | 1 **运行 / 停止**(随状态切换) 播放三角 / 方块 运行=品牌渐变实底;停止=`#FF5470` 实底 **停止要确认,运行不要** | 2 回到 App(任务列表 / 运行详情) 四宫格 白 8% 底 + 白 18% 描边 否 | 3 隐藏悬浮球(收起) eye-off 同上 否 | 4 退出应用 power `#FF5470` @14% 底 + 40% 描边,图标与文字 `#FF5470` **要确认** > **按钮数量上限就是 4 个**。R=96 时相邻按钮间隙约 17.7px,已接近舒适下限;\ 若未来要加第 5 个,建议不要继续挤扇形。 ### 10.4 球的三种状态(图标恒定,靠外环表达) | 状态 外环 外环透明度 呼吸动效 | 空闲 `#6F6C8A` —(**无**外环) 无 | **运行中** `#13DDC4` 0.22 有(外扩到 r=28) | **报错** `#FF5470` 0.20 无(静态外环) > 球内**恒定是 FluxRpa 应用图标**,不随状态更换 —— 避免"中间显示播放图标 → 用户以为点了就运行"的歧义;\ 点击的语义始终是**展开扇形**,状态一律由**外环颜色**表达。\ ⚠️ 报错态**不再**在球内放警示三角(H4 初版曾如此),现统一以红环表达。 ### 10.5 手势 | 手势 阈值 行为 | 单击 — 展开 / 收起扇形 | 按住拖动 位移 > 8px 移动位置;松手**吸附最近边缘**并**记忆位置** **扇形方向自适应**:球在左 → 向右展开;球被拖到屏幕右侧 → **必须镜像为向左展开**,否则整组按钮出屏。 ### 10.6 二次确认弹窗 | 触发 标题 说明 按钮 | 停止(H5) `停止当前脚本?` `脚本一 已运行 12 分 30 秒` / `停止后进度不保留,下次将从开头重新开始` 取消 / **停止运行**(红) | 退出(H6) `退出飞舟脚本?` `将停止正在运行的脚本,并关闭悬浮球` / `脚本进度不保留,下次运行将从开头重新开始` 取消 / **退出应用**(红) ### 10.7「退出应用」语义(用户已确认) **停止脚本 + 关闭悬浮球 + 退出到桌面**(a 方案)。\ 注意:A1 卡密登录页底部已有一个「退出应用」文本按钮,两者语义应保持一致。 ### 10.8 ⚠️ 位置风险(默认改左侧的原因) 右侧垂直居中时球体占 **y 382–430**,而 TikTok 右侧点赞/评论栏约从 **y 447** 起 ——\ **只剩约 17px 余量**,换屏幕比例不同的机型或 TikTok 改版就可能压上,且那片是高频滑动区。\ 左侧中部相对更空,因此**默认放左侧**;但**拖动 + 吸附 + 记忆位置仍必须实现**。 ### 10.9 技术要点 | # 要点 | 1 需 `SYSTEM_ALERT_WINDOW` —— 这是现有权限弹窗中「悬浮窗权限」**唯一实际用途**,故它是**强阻断项** | 2 **Android 10+ 后台启动 Activity 受限**:「回到 App」**不能**用裸 `startActivity`,需通知 / `PendingIntent` 方案 | 3 **与无障碍点击冲突**:脚本坐标点击可能点到球;运行时建议降不透明度,脚本侧点击区域避开球位 | 4 悬浮窗须 `FLAG_NOT_FOCUSABLE`,否则会抢输入焦点、影响 TikTok 键盘 ### 10.10 悬浮球与顶部运行条的关系 两者**并存,不互相替代**: **顶部全局运行条**:只在 App 内可见,承载"点击跳回运行中的任务" **悬浮球**:只在 App 外(浮于其他应用时)才有意义,承载"跨 App 启停与状态可视" > 用户已确认悬浮球在 App 前台**也显示**。若后续觉得重复,最省事的收敛方式是\ **App 前台时把球降到 0.3 透明度**(保留但不抢注意力),而不是隐藏。 ### 10.11 镜像布局(球被拖到屏幕右侧) 球在右边缘时,**扇形必须向左镜像展开**,标签同步移到按钮**左侧**。画板:**H7 `34:223`**。 球心 **`(339, 406)`**(右边距 12,垂直居中不变): | # 按钮 球心 按钮左上角 标签左上角 / 宽 | 1 运行 / 停止 (291, 322.9) (267, 299) (225, 311) / 38 | 2 回到 App (248.8, 373.2) (225, 349) (162, 361) / 59 | 3 隐藏悬浮球 (248.8, 438.8) (225, 415) (150, 427) / 71 | 4 退出应用 (291, 489.1) (267, 465) (203, 477) / 60 **镜像公式**(屏幕坐标 y 向下) 球心:`x_镜像 = 屏宽 − 12 − 球半径` 按钮:`x_镜像 = 屏宽 − x_原 − 按钮宽`,等价于角度取 `θ′ = 180° − θ`,\ 即 `60°/20°/−20°/−60° → 120°/160°/200°/240°` 标签:由「按钮右侧 + 4」改为「**按钮左边 − 4**」→ `标签右边 = 按钮左边 − 4` > H7 里球体正好压在「参考区」(模拟其他 App 的右侧操作栏)上 ——\ 这正是 §10.8 所述重叠风险的可视化,也是必须做**拖动吸附 + 位置记忆**的理由。 --- ## 附:Ardot 设计文件节点索引(供查证) ``` A1 16:257 A2 16:1491 A3 16:288 A4 30:738 B1 30:102 B2 30:203 C1 3:1 C1r 16:138 C2 16:483 C3 16:589 C4 16:706 C5 16:965 C6 3:534 C7 7:11 C8 3:469 C9 3:629 D1 30:871 D2 30:958 D3 30:1241 E1 7:289 E2 16:850 F1 16:23 F2 16:319 F3 30:1005 F4 16:1360 F5 30:1119 H1 34:9 H2 34:23 H3 34:37 H4 34:53 H5 34:121 H6 34:173 H7 34:223(球拖到右侧 · 扇形镜像) 组件母版: 底栏 任务激活 30:45 / 记录激活 30:64 / 我的激活 30:81 返回头 ID提取 30:1 / UID私信 30:7 / 养号 30:18 / 视频功能 30:29 悬浮球背景 34:1(其他应用界面示意) 品牌图标:球 Ø48 用 FluxRpa_mark_only_412(**去字标**)/ 登录 Logo 72 用 FluxRpa_512(完整) 登录 Logo 节点:A1 16:275 / A2 16:1513 / A3 16:309 悬浮球节点:H1 34:18 / H2 34:32 / H3 34:48 / H4 34:64 / H5 34:124 / H6 34:175 / H7 34:225 ``` KS_DOC_REVIEWS JZf9xTgLXBFgjXJ4dJWVsU 187475 https://www.workbuddy.cn/space/d/JZf9xTgLXBFgjXJ4dJWVsU