|
|
1 gün önce | |
|---|---|---|
| .github | 1 gün önce | |
| _probe | 1 hafta önce | |
| docs | 1 gün önce | |
| node_modules | 1 ay önce | |
| tiktok-app | 1 gün önce | |
| tiktok-auto | 1 gün önce | |
| .autojs.sync.ignore | 1 ay önce | |
| .gitignore | 1 hafta önce | |
| PLAN_comment_completeness.md | 2 hafta önce | |
| PLAN_id_extract.md | 5 gün önce | |
| PLAN_pause_resume.md | 5 gün önce | |
| README.md | 1 gün önce | |
| README_tiktok_stats.md | 2 hafta önce | |
| REQ_id_extract_v2.md | 5 gün önce | |
| main.js | 2 hafta önce | |
| package.json | 1 ay önce | |
| project.json | 2 hafta önce | |
| test.js | 2 hafta önce | |
| test2.js | 2 hafta önce | |
| tiktok-uid和视频短链解析.js | 2 hafta önce | |
| tiktok_stats.js | 2 hafta önce | |
| tsconfig.json | 1 ay önce |
AutoX(Auto.js Pro)项目。启动入口是「飞舟脚本」界面,界面就是控制台—— 打开项目先看到界面,在里面配置、点「开始运行」,界面直接唤起执行引擎去操作 TikTok。
| 项 | 值 |
|---|---|
| 清单文件 | project.json |
| 入口字段 | "main": "./main.js" |
| 入口文件 | main.js(项目根目录) |
| 界面 | tiktok-app/(登录激活 → 选脚本 → 调参数 → 开始运行) |
| 执行引擎 | tiktok-auto/(打开 TikTok → 搜索关键词 → 随机观看 → 评论) |
main.js 是一个薄入口:只做「加载界面产物 + 失败时给出可操作的报错」,不含业务逻辑。
入口为什么在根目录:AutoX 项目约定入口在根目录(设备上已有的
task_manager/tk_login/biyun-tk-*项目都是根目录main.js),这样「从哪启动」一眼可见, 也方便在这里做前置检查。
"ui"; 必须在入口文件的第一行AutoX 的 UI 模式由入口脚本的 "ui"; 指令开启。写在被 require 的模块里是无效的
(那只是一句字符串语句)。所以:
main.js 第一行是 "ui";;tiktok-app/dist/tiktok-app.js 自己第一行也有 "ui"; —— 它只在该产物被直接运行
(例如用 RunIntentActivity 打开它)时才起作用;从 main.js require 进来时,
真正决定 UI 模式的是 main.js 的第一行。已在真机实测:main.js → require 界面产物 → UI 模式开启、界面正常渲染。
# 改界面后必须重新构建(入口只是加载产物,不会自动编译)
node tiktok-app/tools/build.js
# 改互动逻辑后重建(与界面各建各的)
node tiktok-auto/tools/build.js
在手机上:让 AutoX 同步本项目 → 打开项目 → 运行(跑的是 main.js → 界面)。
日常使用就是:打开界面 → 选脚本 → 调参数 → 点「开始运行」。 界面会写配置、唤起引擎,引擎去操作 TikTok;跑完界面自己切回前台并告诉你结果。
单独跑执行侧(不经过界面)仍然可用:
node tiktok-auto/tools/run.js --keyword fashion --videos 1
node tiktok-auto/tools/run.js --dry-run # 不真发评论
node tiktok-auto/tools/run.js --self-test # 设备端纯函数自检
开发期只想单独调界面(不经过入口)时,也可以直接运行构建产物:
adb shell "am start -n org.autojs.autoxjs.v7/org.autojs.autojs.external.open.RunIntentActivity \
-a android.intent.action.VIEW -d file:///sdcard/Download/tiktok-app.js -t text/javascript"
⚠️ 常驻界面脚本不要走 MCP 下发:
command:run有 120s 上限,而界面不会__END__, 必然超时。用上面的am start或人在 AutoX 里打开。
界面点「开始运行」做三件事,然后由执行引擎接手:
界面 ──写──▶ /sdcard/tiktok_app/engine-config.json (映射后的引擎配置,含本轮 runId)
──起──▶ engines.execScriptFile(tiktok-auto 产物) (另一个 ScriptEngine)
──读──◀ /sdcard/tiktok_app/run-state.json (进度 / 终态)
──读──◀ /sdcard/tiktok_app/engine-beat.json (心跳,改动前没有,判活用)
──写──▶ /sdcard/tiktok_app/stop.flag (停止请求,内容是 runId)
──读──◀ /sdcard/tiktok_app/run-log.jsonl (执行日志)
外加一份 run-config.json:界面完整配置 + 本次生效的引擎配置 + 「哪些勾了但不会生效」,
给人看、给事后追溯用(没有程序读它)。
这六个文件都在 /sdcard/tiktok_app/ 下,除了日志是逐行 JSON(jsonl)以外都是整份 JSON
—— 出问题直接 cat 就能复盘。
心跳是这次新加的:引擎除了按条目上报进度,还有一个独立线程每 2 秒写一次心跳。
界面靠它区分「活着但正卡在一个 25 秒的观看里」和「已经死了」——只靠状态文件做不到这件事。
协议细节见 docs/PROTOCOL.md。
为什么走文件而不是内存:界面与引擎是两个独立的 ScriptEngine,各有各的全局作用域, 对象传不过去(实测确认)。详见
tiktok-app/README.md第 6 节。
已知能力边界:四个任务(关键词视频 / ID提取 / 养号 / UID私信)都有引擎。
唯一还做不了的界面动作是评论发布:评论面板的发送键是画在输入框右端内部的自绘控件,
无障碍树里没有可点的节点(输入框右边界 1028,到屏宽只剩 52px,装不下 72×72 的按钮)。
私信能发是因为它的输入框右侧留了 192px,有独立节点。视频页勾了「评论」会在启动时如实提示,
日志里报 send-button-not-found,不会假装成功。
| 想改 | 改这里 | 要重新构建吗 |
|---|---|---|
| 界面布局 / 页面 / 文案 | tiktok-app/src/*.js |
是(node tiktok-app/tools/build.js) |
| 界面的配置项 / 默认值 | tiktok-app/src/store.js 的字段表 |
是 |
| 界面 ↔ 引擎的字段映射 | tiktok-app/src/engine.js |
是 |
| 互动流程与逻辑 | tiktok-auto/src/*.js |
是(node tiktok-auto/tools/build.js) |
| 界面 ↔ 引擎的通道协议 | tiktok-auto/src/bridge.js |
是(两侧都要重建) |
| 关键词 / 评论文案 / 观看时长 / 超时 | tiktok-auto/config/tiktok-auto.config.json,推到 /sdcard/Download/tiktok-auto/config.json |
否 |
两个子工程各自的详细说明(设计稿对照、稳定性设计、真机验证记录、排障):
package.json 里的 "main": "main.js" 是 npm 的字段,与 AutoX 入口无关,无需修改。project.json 的 name 已随入口改为 飞舟脚本(原来是「TikTok 自动互动」);
packageName 仍是占位值 org.example.my_project,splashText 仍是
Powered by Auto.js Pro。要正式发布 APK 时建议改成自己的包名与文案
(改包名会让已装的旧 APK 变成另一个应用)。.autojs.sync.ignore 目前只忽略 /build。本地 node_modules/(仅类型声明)与 .git/
也会被同步,数量大时同步会变慢;如需要可自行加上 /node_modules 与 /.git。