Booxin Plugin API
Developer Documentation

Booxin 插件开发者文档

为 Booxin Launcher 开发插件的参考文档。 插件可以扩展启动器的 UI、页面、资源以及当前版本开放的其他扩展能力。 本文档重点说明公开能力和开发思路;没有明确写出的内部实现,不应当作为稳定 API 依赖。

公开能力
插件识别、基础信息、UI 扩展、资源扩展等能力可以作为本文档的主要开发方向。
版本相关
具体字段、事件、权限和 JS Bridge 方法可能随 Launcher 版本变化,请以目标版本实际提供的 API 为准。
不要依赖内部实现
Android 内部路径、缓存目录、内部类名和临时文件结构均不属于稳定插件 API。
01 / Overview

能力边界

Booxin 插件的定位是扩展启动器本身, 而不是重新实现 Minecraft Mod Loader。 插件开发者应该优先使用 Booxin 提供的公开扩展接口, 而不是直接修改 Launcher 内部文件。

UI 扩展
主题配色、壁纸、控件,以及通过 customShell 做深度换皮(自定义整套界面)。
页面扩展
在当前版本开放页面能力的情况下,可以通过插件提供独立页面。
资源扩展
插件可以携带自己的图片、字体、HTML、脚本等资源。
其他扩展
如果某个版本额外开放了 Runtime、Renderer、Driver 等能力, 应按照对应版本的专用规范使用。
重要: 本文档没有列出的内部 API,不代表它一定存在。 尤其不要根据 Launcher 的内部目录、缓存文件或反编译结果自行推断插件接口。

兼容性原则

  • 优先使用公开文档中明确说明的 API。
  • 不要依赖 Android 应用内部绝对路径。
  • 不要依赖插件安装后的内部缓存结构。
  • 不要假设某个字段一定存在于所有 Launcher 版本。
  • 插件如果依赖特定版本能力,应在插件说明中明确标注版本要求。
02 / Quick Start

第一个插件:从插件清单开始

开发插件时,第一步通常不是写复杂的 UI,而是先确认 Launcher 能正确识别你的插件。

2.1 创建插件目录

推荐在本地建立一个独立目录,并把插件清单文件放在插件 ZIP 的根目录。

hello-booxin/
├── booxin-plugin.json
├── icon.png
├── pages/
│   └── index.html
├── assets/
│   └── ...
└── fonts/
    └── ...
上面的目录是示意结构,不是要求每个插件必须包含所有文件。 不要依赖多层嵌套 ZIP 目录能够被所有版本自动识别。 最稳妥的方式是让插件清单文件位于 ZIP 根目录。

2.2 插件清单

插件清单用于描述插件的基本信息。 下面只演示通用的基础信息字段,不代表所有版本的完整字段集合。

{
  "name": "Hello Booxin",
  "version": "1.0.0",
  "author": "YourName",
  "description": "我的第一个 Booxin 插件"
}

至少应该保证插件名称、版本、作者和描述能够准确表达插件用途。

2.3 先验证插件是否被识别

  1. 创建插件目录。
  2. 放入插件清单文件。
  3. 按照目标 Launcher 版本要求打包。
  4. 安装插件。
  5. 在插件管理界面确认插件是否出现。
建议开发时先做到“能识别、能安装、能启用”, 再逐步加入 UI、页面、资源和其他功能。

2.4 关于“问候语插件”

“问候语插件”适合作为第一个入门示例, 但不要在没有确认 API 的情况下自行添加一个所谓的 greeting、homeGreeting 或其他字段。

如果目标版本已经提供问候语相关 API, 请直接按照该版本的实际字段和事件接口编写。 本文档不会虚构一个固定字段名。

03 / UI API

UI 扩展

Booxin 插件的一个主要用途是扩展启动器 UI。 UI API 可以理解成几个层次: 插件信息 → UI 配置 → 视觉表现 → 控件行为 → 页面逻辑。

API 说明: 以下章节中的字段分类用于帮助理解 UI 系统。 除了已经明确公布的基础字段之外, 不要把示例中的中文描述或字段名直接当成固定 API。

3.1 基础 UI 配置

UI 配置一般需要解决三个问题: “是什么”、“显示什么”、“是否启用”。

配置类别 作用 说明
唯一标识 区分插件或 UI 元素 应保持稳定,不要频繁修改。
名称 显示给用户 建议使用简洁、容易理解的名称。
版本 插件版本管理 发布更新时应正确递增。
描述 介绍插件用途 建议说明实际增加了什么功能。
UI 配置 描述 UI 扩展 具体字段取决于当前版本公开的 UI API。

3.2 常见视觉能力

如果当前版本开放对应能力,插件可以参与启动器的视觉表现。

背景
可以用于扩展背景图片、背景资源或其他背景表现。
颜色
可以根据公开主题 API 调整主色、辅助色、文字等视觉元素。
圆角与透明度
如果目标版本提供相应主题参数,可以调整 UI 的视觉层次。
动画
当前版本开放动画接口时,可以通过插件增加 UI 动效。
具体的颜色键名、动画类型、渐变方向、缩放参数等, 不应在没有 API 定义的情况下自行假定。

3.3 自定义控件

自定义控件的核心可以拆成以下几个部分:

部分 解决的问题
控件标识 这个控件是谁。
控件类型 它是按钮、文本、输入框还是其他 UI 元素。
布局信息 控件显示在哪里、大小如何。
视觉信息 颜色、字体、边框、动画等。
行为绑定 用户操作后执行什么逻辑。
权限 如果某项操作需要权限,则按照当前版本权限系统声明。
不要根据这里的“行为绑定”自行创造 callback、action、value 等字段。实际字段名称必须以当前版本 API 为准。

3.4 主题字段

主题系统可以理解为一组统一的视觉变量。 常见概念包括:

概念 常见用途 注意
背景色 页面或卡片背景 具体键名以 API 为准。
主色 按钮、强调元素 具体键名以 API 为准。
辅助色 次级信息、装饰元素 具体键名以 API 为准。
文字色 标题、正文、提示文本 可能由 Launcher 自动管理。
圆角 卡片、按钮等 是否可以全局修改取决于版本。
透明度 玻璃效果、背景层次 不要假设所有组件都支持。

3.5 操作与事件

操作系统可以简单理解为: 用户产生事件 → Launcher 判断事件 → 插件执行对应逻辑。

点击
用户点击控件后触发对应行为。
长按
如果当前版本开放长按事件,可以用于更多交互。
键盘输入
PC 环境下可能存在键盘相关事件。
触摸输入
移动端可以根据公开 API 处理触摸相关交互。
PC 与移动端的输入设备不同。 插件如果需要同时支持两个平台,应避免把某一种输入设备作为唯一交互方式。

3.6 自定义页面与 JavaScript

如果当前版本开放页面插件能力, 可以使用 HTML、CSS、JavaScript 制作插件自己的页面。

一个页面配置可以抽象成:

{
  "type": "page",
  "id": "example-page",
  "name": "Example Page",
  "url": "pages/index.html"
}
上面的示例只展示页面配置的基本概念。 权限字段、权限名称、JS Bridge 方法和页面注册方式可能随 Launcher 版本变化,因此不要直接假定存在某个固定权限名或固定方法名。

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 包时,按本机插件扫描顺序取第一个。
深度换皮不提供:任意 Android XML 替换、系统 shell、 任意文件读写、游戏底层(JVM / SDL)控制。 请用 HTML/CSS/JS + BooxinShell 白名单 API 实现界面。
04 / Resources

资源管理

插件可以携带自己的资源文件。 推荐将资源放在插件自己的目录中,并通过相对路径引用。

hello-booxin/
├── booxin-plugin.json
├── icon.png
├── assets/
│   ├── background.png
│   ├── logo.png
│   └── sounds/
├── pages/
│   └── index.html
└── fonts/
    └── custom.ttf

资源建议

  • 文件名尽量使用英文、数字、下划线或短横线。
  • 不要使用绝对路径。
  • 不要依赖其他插件的私有资源。
  • 大图片应注意文件体积和内存占用。
  • 字体文件应确认许可证允许随插件分发。
插件资源目录是插件自身的资源空间。 不要假设安装后它一定对应某一个 Android 内部绝对路径。
05 / Testing

本地自测

插件开发完成后,建议按照以下顺序进行测试。

5.1 基础安装测试

  1. 确认插件清单文件存在。
  2. 确认 ZIP 结构正确。
  3. 安装插件。
  4. 检查插件是否出现在插件管理界面。
  5. 启用插件。
  6. 重启 Launcher 再检查一次。

5.2 功能测试

  • 检查插件 UI 是否正常显示。
  • 检查按钮和输入操作。
  • 检查页面打开和关闭。
  • 检查资源加载。
  • 检查不同窗口尺寸。
  • 检查 PC / 移动端差异。

5.3 卸载测试

一个合格的插件不仅要能够安装,也应该能够被正常禁用和卸载。

如果插件卸载后 Launcher 仍然依赖插件留下的文件, 应视为发布前需要解决的问题。
06 / Renderer

Renderer / Driver 扩展

Renderer、Driver 等属于比普通 UI 插件更底层的扩展能力。 如果目标版本已经正式开放相关能力,请严格按照对应版本提供的安装器、 文件格式和兼容性要求使用。

不要依赖内部实现。 例如 Android 应用内部的 /data/data/... 路径、 某个缓存目录、内部动态库名称或环境变量, 都不应被插件作者当作稳定接口。

为什么需要单独规范?

Renderer / Driver 会直接影响图形渲染和游戏启动环境, 与普通 UI 插件的生命周期不同。 因此不能简单地认为“把一个 APK 或 so 放进去就能作为插件”。

如果当前版本没有公开某种 Renderer / Driver 插件规范, 请不要自行制作依赖内部目录的安装方案。

兼容性
明确支持的 Launcher 版本、Android 版本和设备架构。
架构
注意 ARM64、ARM32 等不同 CPU 架构的差异。
权限
不要要求与功能无关的系统权限。
回滚
底层扩展失败时应尽量能够恢复到原有环境。
07 / Store

商店下载与安装规则

如果插件通过 Booxin 插件商店或其他分发渠道发布, 插件包除了能够运行,还需要满足基本的可分发要求。

插件包要求

  • 插件信息完整。
  • 版本号明确。
  • 作者信息真实。
  • 插件用途描述清楚。
  • 资源文件能够正常加载。
  • 不存在明显恶意行为。
  • 不会通过插件偷偷修改与自身功能无关的用户文件。

下载失败排查

现象 优先检查
商店中找不到插件 检查插件是否已经发布、审核状态和搜索信息。
下载失败 检查网络、下载地址和服务器状态。
安装失败 检查插件包结构和清单文件。
安装后无法启用 检查 Launcher 版本兼容性以及插件运行日志。
UI 不显示 检查 UI 配置、资源路径和页面加载情况。
08 / Publish

申请上架

准备发布插件时,建议提供以下信息:

插件名称
使用最终用户能够理解的名称。
插件版本
与插件包中的版本保持一致。
作者
使用真实的作者或开发团队名称。
功能介绍
说明插件具体增加了哪些功能。

建议同时提供

  • 插件图标。
  • 功能截图。
  • 兼容 Launcher 版本。
  • 已知问题。
  • 更新日志。
  • 开源地址(如果插件开源)。
  • 联系方式。
如果插件需要特殊权限、网络访问或其他敏感能力, 应在发布说明中主动说明用途。
09 / Types

插件类型说明

以下分类用于帮助开发者理解插件功能方向, 不应理解成某个固定的官方枚举值。

类型 主要用途 示例
UI 扩展 修改或增加启动器界面 主题、控件、深度换皮(customShell)
页面扩展 增加独立页面 设置页、工具页、信息页
资源扩展 提供额外资源 图片、字体、页面资源
Runtime / Driver 更底层的运行环境扩展 仅在当前版本正式支持时使用
一个插件可以同时包含多种功能。 实际能否组合使用,取决于 Launcher 当前版本提供的插件 API。
10 / Troubleshooting

报错与排查

问题 常见排查方向
插件完全无法识别 检查插件包结构、清单文件名称和 JSON 格式。
插件可以安装但无法启用 检查 Launcher 版本兼容性和插件运行日志。
页面打不开 检查页面资源路径、HTML 文件以及页面注册配置。
图片无法显示 检查相对路径、文件名大小写以及资源是否真正打包。
字体无法加载 检查字体文件完整性、格式和授权情况。
升级 Launcher 后插件失效 检查是否使用了版本相关 API 或未公开的内部实现。
移动端正常,PC 异常 检查平台差异以及输入、窗口和资源加载方式。

最重要的排查方法

如果插件出现问题,先把问题缩小到最小:

  1. 只保留插件清单。
  2. 确认 Launcher 能识别。
  3. 加入一个最简单的功能。
  4. 确认功能正常。
  5. 再逐步加入其他代码和资源。
不要一次加入几十项功能后再排查。 最小化复现通常比直接修改大量代码更快找到问题。
11 / Checklist

发布清单

发布之前可以逐项检查下面的内容。

检查项 完成
插件名称正确 □
插件版本正确 □
作者信息正确 □
插件描述完整 □
插件清单文件位于正确位置 □
ZIP 包结构正确 □
所有资源都已经打包 □
PC 端测试完成 □
移动端测试完成(如果支持) □
安装 / 启用测试完成 □
禁用 / 卸载测试完成 □
不存在对内部路径的依赖 □
没有使用未确认的 API □
更新日志已经准备 □
发布前尤其检查最后两项: 不要使用没有确认过的 API,也不要依赖 Launcher 内部实现。
Appendix

Booxin Studio

如果你不想完全手写插件,可以使用 Booxin 提供的开发工具或相关工具链进行开发。

工具本身的功能和生成结果也可能随版本变化。 使用自动生成的插件后,仍然建议人工检查插件清单、资源结构和实际 API。