Booxin 插件开发者文档
为 Booxin Launcher 开发插件的参考文档。 插件可以扩展启动器的 UI、页面、资源以及当前版本开放的其他扩展能力。 本文档重点说明公开能力和开发思路;没有明确写出的内部实现,不应当作为稳定 API 依赖。
能力边界
Booxin 插件的定位是扩展启动器本身, 而不是重新实现 Minecraft Mod Loader。 插件开发者应该优先使用 Booxin 提供的公开扩展接口, 而不是直接修改 Launcher 内部文件。
兼容性原则
- 优先使用公开文档中明确说明的 API。
- 不要依赖 Android 应用内部绝对路径。
- 不要依赖插件安装后的内部缓存结构。
- 不要假设某个字段一定存在于所有 Launcher 版本。
- 插件如果依赖特定版本能力,应在插件说明中明确标注版本要求。
第一个插件:从插件清单开始
开发插件时,第一步通常不是写复杂的 UI,而是先确认 Launcher 能正确识别你的插件。
2.1 创建插件目录
推荐在本地建立一个独立目录,并把插件清单文件放在插件 ZIP 的根目录。
hello-booxin/
├── booxin-plugin.json
├── icon.png
├── pages/
│ └── index.html
├── assets/
│ └── ...
└── fonts/
└── ...
2.2 插件清单
插件清单用于描述插件的基本信息。 下面只演示通用的基础信息字段,不代表所有版本的完整字段集合。
{
"name": "Hello Booxin",
"version": "1.0.0",
"author": "YourName",
"description": "我的第一个 Booxin 插件"
}
至少应该保证插件名称、版本、作者和描述能够准确表达插件用途。
2.3 先验证插件是否被识别
- 创建插件目录。
- 放入插件清单文件。
- 按照目标 Launcher 版本要求打包。
- 安装插件。
- 在插件管理界面确认插件是否出现。
2.4 关于“问候语插件”
“问候语插件”适合作为第一个入门示例,
但不要在没有确认 API 的情况下自行添加一个所谓的
greeting、homeGreeting 或其他字段。
如果目标版本已经提供问候语相关 API, 请直接按照该版本的实际字段和事件接口编写。 本文档不会虚构一个固定字段名。
UI 扩展
Booxin 插件的一个主要用途是扩展启动器 UI。 UI API 可以理解成几个层次: 插件信息 → UI 配置 → 视觉表现 → 控件行为 → 页面逻辑。
3.1 基础 UI 配置
UI 配置一般需要解决三个问题: “是什么”、“显示什么”、“是否启用”。
| 配置类别 | 作用 | 说明 |
|---|---|---|
| 唯一标识 | 区分插件或 UI 元素 | 应保持稳定,不要频繁修改。 |
| 名称 | 显示给用户 | 建议使用简洁、容易理解的名称。 |
| 版本 | 插件版本管理 | 发布更新时应正确递增。 |
| 描述 | 介绍插件用途 | 建议说明实际增加了什么功能。 |
| UI 配置 | 描述 UI 扩展 | 具体字段取决于当前版本公开的 UI API。 |
3.2 常见视觉能力
如果当前版本开放对应能力,插件可以参与启动器的视觉表现。
3.3 自定义控件
自定义控件的核心可以拆成以下几个部分:
| 部分 | 解决的问题 |
|---|---|
| 控件标识 | 这个控件是谁。 |
| 控件类型 | 它是按钮、文本、输入框还是其他 UI 元素。 |
| 布局信息 | 控件显示在哪里、大小如何。 |
| 视觉信息 | 颜色、字体、边框、动画等。 |
| 行为绑定 | 用户操作后执行什么逻辑。 |
| 权限 | 如果某项操作需要权限,则按照当前版本权限系统声明。 |
callback、action、value
等字段。实际字段名称必须以当前版本 API 为准。
3.4 主题字段
主题系统可以理解为一组统一的视觉变量。 常见概念包括:
| 概念 | 常见用途 | 注意 |
|---|---|---|
| 背景色 | 页面或卡片背景 | 具体键名以 API 为准。 |
| 主色 | 按钮、强调元素 | 具体键名以 API 为准。 |
| 辅助色 | 次级信息、装饰元素 | 具体键名以 API 为准。 |
| 文字色 | 标题、正文、提示文本 | 可能由 Launcher 自动管理。 |
| 圆角 | 卡片、按钮等 | 是否可以全局修改取决于版本。 |
| 透明度 | 玻璃效果、背景层次 | 不要假设所有组件都支持。 |
3.5 操作与事件
操作系统可以简单理解为: 用户产生事件 → Launcher 判断事件 → 插件执行对应逻辑。
3.6 自定义页面与 JavaScript
如果当前版本开放页面插件能力, 可以使用 HTML、CSS、JavaScript 制作插件自己的页面。
一个页面配置可以抽象成:
{
"type": "page",
"id": "example-page",
"name": "Example Page",
"url": "pages/index.html"
}
JavaScript Bridge
JavaScript Bridge 用于让插件页面与 Launcher 进行通信。 具体可调用的方法必须以当前版本实际提供的 Bridge API 为准。
常见需求包括:
- 读取插件或 Launcher 提供的信息。
- 显示提示信息。
- 打开外部链接。
- 请求页面导航。
- 关闭插件页面。
BooxinPlugin。
常用方法:
getInfo()、
toast(msg)、
openUrl(url)、
navigate(dest)、
close()。
启用插件时若声明了 jsCommands,需用户授权后才会注入。
3.7 深度换皮(customShell)
若只想改配色 / 壁纸 / 文案,请使用
customTheme。
若需要用一整套自定义界面(侧栏、主页、启动按钮等)替换默认顶栏与主页,
请使用 customShell。
深度换皮由启动器托管 WebView 加载插件内 HTML, 不是替换任意 Android 原生布局 XML。
{
"schema": 1,
"id": "my-custom-shell",
"name": "我的界面包",
"version": "1.0.0",
"type": "ui",
"features": {
"customShell": true
},
"shell": {
"entry": "shell/index.html",
"hideChrome": true,
"keepBackground": true
}
}
| 字段 | 说明 |
|---|---|
features.customShell |
声明深度换皮意图;写了非空 shell.entry 时也会自动开启。 |
shell.entry |
插件目录内相对 HTML。缺省还会尝试 shell/index.html、shell.html、ui/shell.html。 |
shell.hideChrome |
显示自定义界面时隐藏默认顶栏,默认 true。 |
shell.keepBackground |
是否保留启动器背景层,默认 true。 |
权限
启用含 customShell 的插件时,启动器会弹出
自定义界面权限 确认框。
用户允许后才会替换默认界面并注入桥接对象。
拒绝后仍可启用主题等其它能力。
JavaScript Bridge:BooxinShell
用户授权后注入。常用方法:
| 方法 | 作用 |
|---|---|
getInfo() |
启动器版本、当前选中版本、账户摘要(不含令牌)。 |
toast(msg) |
显示短提示。 |
openUrl(url) |
仅允许 http/https,外部打开。 |
navigate(dest) |
home /
versions /
community /
multiplayer /
ai /
plugins /
settings /
accounts /
shell(回到自定义界面)。
|
listVersions() |
已安装版本列表。 |
selectVersion(id) |
选择已安装版本。 |
getSelectedVersion() |
当前选中版本。 |
launch(versionId?) |
启动游戏;可省略参数使用当前选中版本。 |
showShell() |
从原生页返回自定义界面。 |
customShell 包时,按本机插件扫描顺序取第一个。
BooxinShell 白名单 API 实现界面。
资源管理
插件可以携带自己的资源文件。 推荐将资源放在插件自己的目录中,并通过相对路径引用。
hello-booxin/
├── booxin-plugin.json
├── icon.png
├── assets/
│ ├── background.png
│ ├── logo.png
│ └── sounds/
├── pages/
│ └── index.html
└── fonts/
└── custom.ttf
资源建议
- 文件名尽量使用英文、数字、下划线或短横线。
- 不要使用绝对路径。
- 不要依赖其他插件的私有资源。
- 大图片应注意文件体积和内存占用。
- 字体文件应确认许可证允许随插件分发。
本地自测
插件开发完成后,建议按照以下顺序进行测试。
5.1 基础安装测试
- 确认插件清单文件存在。
- 确认 ZIP 结构正确。
- 安装插件。
- 检查插件是否出现在插件管理界面。
- 启用插件。
- 重启 Launcher 再检查一次。
5.2 功能测试
- 检查插件 UI 是否正常显示。
- 检查按钮和输入操作。
- 检查页面打开和关闭。
- 检查资源加载。
- 检查不同窗口尺寸。
- 检查 PC / 移动端差异。
5.3 卸载测试
一个合格的插件不仅要能够安装,也应该能够被正常禁用和卸载。
Renderer / Driver 扩展
Renderer、Driver 等属于比普通 UI 插件更底层的扩展能力。 如果目标版本已经正式开放相关能力,请严格按照对应版本提供的安装器、 文件格式和兼容性要求使用。
/data/data/... 路径、
某个缓存目录、内部动态库名称或环境变量,
都不应被插件作者当作稳定接口。
为什么需要单独规范?
Renderer / Driver 会直接影响图形渲染和游戏启动环境, 与普通 UI 插件的生命周期不同。 因此不能简单地认为“把一个 APK 或 so 放进去就能作为插件”。
如果当前版本没有公开某种 Renderer / Driver 插件规范, 请不要自行制作依赖内部目录的安装方案。
商店下载与安装规则
如果插件通过 Booxin 插件商店或其他分发渠道发布, 插件包除了能够运行,还需要满足基本的可分发要求。
插件包要求
- 插件信息完整。
- 版本号明确。
- 作者信息真实。
- 插件用途描述清楚。
- 资源文件能够正常加载。
- 不存在明显恶意行为。
- 不会通过插件偷偷修改与自身功能无关的用户文件。
下载失败排查
| 现象 | 优先检查 |
|---|---|
| 商店中找不到插件 | 检查插件是否已经发布、审核状态和搜索信息。 |
| 下载失败 | 检查网络、下载地址和服务器状态。 |
| 安装失败 | 检查插件包结构和清单文件。 |
| 安装后无法启用 | 检查 Launcher 版本兼容性以及插件运行日志。 |
| UI 不显示 | 检查 UI 配置、资源路径和页面加载情况。 |
申请上架
准备发布插件时,建议提供以下信息:
建议同时提供
- 插件图标。
- 功能截图。
- 兼容 Launcher 版本。
- 已知问题。
- 更新日志。
- 开源地址(如果插件开源)。
- 联系方式。
插件类型说明
以下分类用于帮助开发者理解插件功能方向, 不应理解成某个固定的官方枚举值。
| 类型 | 主要用途 | 示例 |
|---|---|---|
| UI 扩展 | 修改或增加启动器界面 | 主题、控件、深度换皮(customShell) |
| 页面扩展 | 增加独立页面 | 设置页、工具页、信息页 |
| 资源扩展 | 提供额外资源 | 图片、字体、页面资源 |
| Runtime / Driver | 更底层的运行环境扩展 | 仅在当前版本正式支持时使用 |
报错与排查
| 问题 | 常见排查方向 |
|---|---|
| 插件完全无法识别 | 检查插件包结构、清单文件名称和 JSON 格式。 |
| 插件可以安装但无法启用 | 检查 Launcher 版本兼容性和插件运行日志。 |
| 页面打不开 | 检查页面资源路径、HTML 文件以及页面注册配置。 |
| 图片无法显示 | 检查相对路径、文件名大小写以及资源是否真正打包。 |
| 字体无法加载 | 检查字体文件完整性、格式和授权情况。 |
| 升级 Launcher 后插件失效 | 检查是否使用了版本相关 API 或未公开的内部实现。 |
| 移动端正常,PC 异常 | 检查平台差异以及输入、窗口和资源加载方式。 |
最重要的排查方法
如果插件出现问题,先把问题缩小到最小:
- 只保留插件清单。
- 确认 Launcher 能识别。
- 加入一个最简单的功能。
- 确认功能正常。
- 再逐步加入其他代码和资源。
发布清单
发布之前可以逐项检查下面的内容。
| 检查项 | 完成 |
|---|---|
| 插件名称正确 | □ |
| 插件版本正确 | □ |
| 作者信息正确 | □ |
| 插件描述完整 | □ |
| 插件清单文件位于正确位置 | □ |
| ZIP 包结构正确 | □ |
| 所有资源都已经打包 | □ |
| PC 端测试完成 | □ |
| 移动端测试完成(如果支持) | □ |
| 安装 / 启用测试完成 | □ |
| 禁用 / 卸载测试完成 | □ |
| 不存在对内部路径的依赖 | □ |
| 没有使用未确认的 API | □ |
| 更新日志已经准备 | □ |
Booxin Studio
如果你不想完全手写插件,可以使用 Booxin 提供的开发工具或相关工具链进行开发。