ToolZen 的搜索入口有两种来源:静态声明(manifest.json 里的 features[].cmds)与运行期动态增删(api.setFeature() / api.getFeatures() / api.removeFeature(),需要 feature:dynamic 权限,apiLevel 7 起)。
两种方式共用同一套 Feature 结构,宿主搜索时会同时看这两份。
| 静态声明 | 动态增删 | |
|---|---|---|
| 写在哪 | manifest.json |
运行期调 API |
| 适合 | 功能入口固定(「JSON 美化」「取色」) | 入口由用户配置决定(网页快开、自定义快捷方式) |
| 需要权限 | 不需要 | feature:dynamic |
| 用户可见性 | 安装时即在商店页展示 | 运行期出现,用户在启动器里能看到 |
入口固定就用静态声明——它会在商店详情页展示,用户装之前就知道有哪些功能。动态增删是给「装的时候还不知道有哪些入口」这类插件准备的。
feature:dynamic)要点:
code 必填(静态声明里可以省,动态入口不行)——它是 removeFeature 的唯一凭据,没有 code 就删不掉。manifest.json 里的 features 在每次同步插件表时会被整体重写,动态入口是本地状态,不受影响。搜索时两份都会参与匹配。用户复制文件后唤出客户端时,声明了文件指令的插件会作为「快捷识别」候选出现。命中后 enterAction.type 为 'file':payload 是绝对路径用 \n 连接的结果,绝对路径数组在 enterAction.files 中。clipboardRules 里的 matchType: "file" 是等效的另一种声明方式;插件也可以进入后主动调用 api.readClipboardFiles() 拉取路径。
指令命中后,通过 enterAction 或 onPluginEnter 获取功能编码和载荷:
剪贴板自动识别规则使用 clipboardRules,配置写在插件的 manifest.json 中。