用途:创建 PhoneBase 应用技能,即脚本化自动化包,把 Android 应用变成 pb CLI 子命令。
工作流程:研究应用(包名、deeplink、关键界面、UI 模式);用 pb skills new <name> --package <pkg> 脚手架并提取图标;先写 open.js、close.js、state.js,再加业务命令;在真机测试并迭代。
目录结构:~/.phonebase/skills/<name>/ 下含 SKILL.md(frontmatter + 文档)、resources/ic_launcher.webp(图标)、scripts/(一个 .js 文件对应一个命令,_ 或 . 开头不注册为命令)。技能名须为小写 [a-z0-9_-],1–64 字符。
命令协议:每个脚本首个 /** / 块用 JSDoc 声明命令,@arg 语法为 @arg <name>:<type>[modifier] [description],类型有 string/int/float/bool/path,修饰符 ! 必填、=值 可选默认、 多值。脚本用 node:util 的 parseArgs 读取参数。
SDK:require('@phonebase-cloud/pb'),方法均返回 Promise,经 Unix socket 与 pb daemon 通信。能力涵盖设备控制(tap/swipe/input/keyevent)、应用管理(launch/startActivity/forceStop/topActivity/packagesList/installPackage/uninstallPackage)、UI 观察(dumpc/dump/screencap/findTextInDump/waitText/tapText)、浏览器/剪贴板/显示信息/shell/文件传输等。
输出约定:stdout 只输出业务 JSON,pb 自动包装为 {code,data,msg}。不要加 status 字段,失败用 process.exit(1) 加 stderr。建议在 _lib.js 放 finish/fail 等辅助函数。
标准命令:每个技能至少提供 open 和 close,强烈建议 state。open 只启动并快速返回;state 做完整内省;close 仅强停。
稳定性模式:优先用 deeplink 而非 UI 点击;输入前先清空(pb.input 会追加);处理对话框打断;对无文本图标按钮用几何定位;带超时轮询;通过 Activity 类名与可见文本判断登录页。
撰写原则:解释“为什么”、从示例中泛化、保持精简。
反模式:输出加 status、把内省放进 open、依赖 resource-id、硬编码坐标、console.log 调试、用数字键码、跳过清空输入、一个文件放多个命令。
测试:pb skills new 脚手架、pb skills validate 校验、pb -s <device_id> <skill> <command> 真机运行,并用 python3 校验输出结构。
限制:须在真实设备测试,无 mock;应用更新、弹窗与 UI 移动会使技能不稳定,需迭代维护。具体收费、价格与平台支持情况,资料暂未提供。