booxin

插件开发者文档

按当前手机版启动器真实行为编写:字段怎么填、包怎么打、装到哪、怎样自测、商店点下载后走哪条安装路径。

1. 能力边界(先看这个)

能力状态具体表现
主页按时段问候 可用 UI zip 开启 homeGreetingByTime 后,主页标题变为早上好/中午好/晚上好
左右滑动过渡 可用 开启 pageSlideTransitions 后,顶部导航切页与进入/返回游戏使用左右滑动动画
首页 3D 模型 可用 开启 home3dModel 后,首页欢迎区显示当前账号玩家 3D 皮肤(微软拉正版皮肤 / 离线用导入皮肤;逻辑在启动器内)
操控布局 controlLayout 可用 开启 controlLayout 并附带布局 JSON;支持 buttons[].icon 贴图与 style/css JSON 绘制
JS 命令权限 jsCommands 可用 插件声明 features.jsCommands;启用时需用户授权。页面内可调用白名单 BooxinPlugin.*(toast / openUrl / navigate / close / getInfo)。无 shell、无任意文件、无游戏底层控制
自定义页面 customPages 可用 清单 pages[](id/title/entry HTML);由启动器 WebView 托管,顶栏可出现页面入口。仍属启动器 UI 层
主页品牌图标 可用 开启 customLauncherIcon 并附带图片后,替换主页左侧品牌圆标(不改系统桌面图标)
自定义界面字体 可用 开启 customFont(或主题包)并附带 .ttf/.otf
完整主题包 customTheme 可用 品牌名、欢迎语、配色、顶栏导航文案、壁纸图/视频;并解锁同包图标与字体
本机插件启用/禁用/卸载/导入 可用 侧边栏「本机插件」;支持商店安装与「导入 zip」;禁用写 .disabled
渲染器/驱动 so 安装 可用 APK 导入或商店下载;解压到本机渲染器目录
换布局 / 自定义页面 XML 未接线 不能替换布局文件或注入任意页面
input / overlay / pack 独立钩子 未接线 可安装到「本机插件」管理,暂无独立运行时行为

UI 插件可深度换肤,但不能改系统桌面图标、系统字体、游戏内 UI,也不能替换布局 XML。 推荐一把梭:features.customTheme: true + theme 对象。

2. 手把手:做一个真正会生效的问候语插件

1在电脑建目录

D:\plugins\my-greeting\
└── booxin-plugin.json

文件名必须恰好是 booxin-plugin.json(全小写,中间是连字符)。

2写入以下内容(可原样复制)

{
  "id": "my-greeting",
  "name": "按时段问候",
  "version": "1.0.0",
  "type": "ui",
  "description": "启用后主页显示早上好/中午好/晚上好。禁用后恢复默认欢迎语。",
  "features": {
    "homeGreetingByTime": true
  }
}

3打 zip(结构必须对)

正确

my-greeting.zip
└── booxin-plugin.json

打开 zip 后第一层就能看见清单。

错误(装不上)

my-greeting.zip
└── my-greeting/
    └── booxin-plugin.json

多套一层文件夹时,请保证清单仍能被搜到;最稳是不要多套。

Windows 资源管理器:进入 my-greeting 文件夹 → 选中 booxin-plugin.json → 右键 →「发送到」→「压缩(zipped)文件夹」→ 改名为 my-greeting.zip

PowerShell(推荐,结构更稳):

cd D:\plugins\my-greeting
Compress-Archive -Path .\booxin-plugin.json -DestinationPath ..\my-greeting.zip -Force

也可用官方工具一键打包:文末 附录 · Booxin Studio前往下载)。 推荐双击 BooxinStudio.exe 用微型 IDE「一键打包」;命令行则用 BooxinStudio-CLI.exe pack 插件目录

不要用加密 zip、7z、rar、分卷包。客户端只按 zip 解。

4装进启动器后怎么验证

  1. 手机打开 Booxin → 底部「插件」。
  2. 左侧点「本机插件」(商店装完会自动切过来;ADB 推送则手动点)。
  3. 应看到名称「按时段问候」,详情类似:ui · 已启用 · v1.0.0
  4. 再点底部「主页」。欢迎语应变成:
    • 0:00–10:59 → 早上好
    • 11:00–16:59 → 中午好
    • 17:00–23:59 → 晚上好
  5. 回「本机插件」点「禁用」→ 再回主页 → 应恢复「欢迎使用 Booxin」。

3. UI 插件:清单字段与安装目录(具体)

3.1 安装落盘位置

/data/data/com.booxin.launcher/files/booxin-runtime/ui-plugins/<id>/
├── booxin-plugin.json
├── .ready                 ← 安装成功时写入时间戳
├── .disabled              ← 仅禁用时存在;删除即启用
└── (zip 里其它文件会一并解压到这里)
  • 包名以实际安装为准:正式包一般为 com.booxin.launcher
  • <id> 来自清单 id;非法字符 \ / : * ? " < > | 会被替换成 _
  • 相同 id 再安装:先删整个旧目录再写入(覆盖更新)。

3.2 客户端实际读取的字段

JSON 字段要求默认值用途
id 必需 空字符串 → 安装报错「plugin id 为空」
name 建议 等于 id 本机插件列表标题
version 建议 1.0.0 列表显示 v…
type 建议 ui 仅展示;商店筛选另看申请类型
description 建议 列表下方灰色简介
features.homeGreetingByTime 可选 false 主页按时段问候
features.pageSlideTransitions 可选 false 顶部导航切页与进入/返回游戏使用左右滑动过渡
features.home3dModel 可选 false 首页欢迎区显示当前账号玩家 3D 皮肤(逻辑在启动器内)
features.controlLayout 可选 false 游戏内虚拟按键使用插件布局;配合 layoutFile(默认 control_layout.json,version 4)
layoutFile 操控建议 control_layout.json 相对安装目录的操控布局 JSON(version 4:buttons / joystick / floatingBall / gestureQuick
buttons[].icon 可选 (空) 按钮贴图路径(相对本插件目录);优先于 CSS 绘制
buttons[].style / css 可选 (空) CSS 风格 JSON 绘制(颜色/描边/圆角/渐变/透明度等);可被布局级 buttonStyle 作默认
features.customLauncherIcon 可选 false 主页左侧品牌图标换成插件图片
features.customFont 可选 false 启动器界面文字使用插件字体
features.customTheme 可选 false 完整主题包;写了 theme 对象也会自动开启
theme 可选 空对象 品牌 / 欢迎语 / 配色 / 导航 / 壁纸,见第 4.4 节
launcherIcon / icon 可选 见下方候选名 相对安装目录的图片路径,如 icon.png
font / fontFile 可选 见下方候选名 相对安装目录的字体路径,如 fonts/MyFont.ttf
根级同名布尔字段 可选 false homeGreetingByTime / pageSlideTransitions / home3dModel / customLauncherIcon / customFont 可写在根级

3.3 清单放置位置

  • 优先:zip 根目录 booxin-plugin.json
  • 也支持:任意子路径,只要条目名以 booxin-plugin.json 结尾(例如 pkg/booxin-plugin.json)。
  • 若清单在 pkg/ 下,解压时会去掉 pkg/ 前缀,使文件落到安装根目录。

3.4 完整主题包示例(推荐)

{
  "id": "demo-full-theme",
  "name": "Full Theme Pack",
  "version": "1.0.0",
  "type": "ui",
  "description": "品牌 + 配色 + 壁纸 + 字体 + 图标",
  "launcherIcon": "icon.png",
  "font": "fonts/MyFont.ttf",
  "features": {
    "customTheme": true,
    "homeGreetingByTime": true
  },
  "theme": {
    "brandName": "MyLauncher",
    "welcome": "欢迎回来",
    "welcomeMorning": "早上好",
    "welcomeNoon": "中午好",
    "welcomeEvening": "晚上好",
    "backgroundImage": "backgrounds/bg.png",
    "backgroundVideo": "backgrounds/loop.mp4",
    "backgroundAlpha": 0.85,
    "colors": {
      "primary": "#449AD8",
      "accent": "#FF8A2B",
      "text": "#F2F6FF",
      "textSecondary": "#B4C0D4",
      "rim": "#88FFFFFF",
      "glassPrimary": "#CC2A6FA8",
      "surface": "#141A26",
      "navSelected": "#FFFFFF",
      "navUnselected": "#B4C0D4"
    },
    "nav": {
      "home": "主页",
      "versions": "版本",
      "community": "社区",
      "multiplayer": "联机",
      "ai": "AI",
      "pluginStore": "插件",
      "settings": "设置"
    }
  }
}
demo-full-theme.zip
├── booxin-plugin.json
├── icon.png
├── fonts/MyFont.ttf
└── backgrounds/
    ├── bg.png
    └── loop.mp4

3.5 操控布局接口(贴图 + CSS JSON 绘制)

目录结构示例:

my-control-pack/
├── booxin-plugin.json
├── control_layout.json
└── assets/
    └── btn.png

booxin-plugin.json

{
  "schema": 1,
  "id": "my-control-pack",
  "name": "My Control Pack",
  "version": "1.0.0",
  "type": "control",
  "features": { "controlLayout": true },
  "layoutFile": "control_layout.json"
}

布局文件候选(相对安装目录,声明优先):

  • layoutFile(清单字段)
  • control_layout.json / layout.json / controls.json / assets/control_layout.json

buttons[] 主要字段:

字段说明
id按钮标识;建议稳定唯一,便于与用户本机位置合并
label显示文案(叠在按钮表面)
kindKEY_TAP / KEY_HOLD / MOUSE_HOLD / SCROLL / SOFT_KEYBOARD / KEY_FOLLOW / MOUSE_FOLLOW
code主键码(GLFW);软键盘可为 0
codes可选;长度 ≥2 表示组合键
x / y按钮中心,相对父布局 0..1
sizeDp可选,边长 dp
icon可选贴图路径;优先于 CSS 绘制
style / css可选 CSS 风格对象;覆盖布局级默认样式

kind 行为:

  • KEY_TAP:抬起点击一次
  • KEY_HOLD / MOUSE_HOLD:按住;手指滑出按钮后交给触控板转视角
  • KEY_FOLLOW / MOUSE_FOLLOW:按住时按钮跟手移动并保持按下,松开回弹原位
  • SOFT_KEYBOARD:切换软键盘;布局未写时启动器会自动补一个,用户拖动位置会记住
  • SCROLL:滚轮(code ≥0 为上)

joystick.follow(默认 true):按下时轮盘移到指下,拖出外圈底盘追手,松开回弹;编辑时可点选轮盘后用「跟手」开关。

启用操控插件后,用户在游戏内拖动的按键/轮盘/软键盘位置会写入本机并与插件合并(插件管贴图样式,本机覆盖坐标),避免每次重置。

布局级默认样式:buttonStyle / buttonCss(结构同单键 style)。

绘制优先级:icon 贴图 → style/css → 默认圆形底

buttons[].icon 规则:

  • 相对本插件安装目录,例如 assets/btn.png
  • 扩展名:png / webp / jpg / jpeg
  • 禁止绝对路径、禁止路径含 ..;解析结果必须落在插件目录内
  • 多个已启用的 controlLayout 包时,只取扫描到的第一个

style / css 字段:

字段别名说明
backgroundColorbackground / bg填充色 #RGB / #RRGGBB / #AARRGGBB
borderColorborder-color描边色
borderWidthborder-width描边宽度(dp)
borderRadiusradius圆角 dp;50%/full/circle → 圆
shapeoval / circle / rect / roundrect / pill
gradient颜色数组(≥2);或 linear-gradient(#a,#b)
gradientOrientationtl_br / top_bottom / left_right
textColorcolor文案颜色
opacityalpha0.15..1
pressScalepress-scale / clickScale按下缩放 0.72..1,默认约 0.90
pressEffectpress-effect / clickEffect;或 "jelly": truesquash(瞬时)/ jelly(挤压 + 回弹)

control_layout.json 片段:

{
  "version": 4,
  "buttonStyle": {
    "shape": "oval",
    "backgroundColor": "#AA2A6FA8",
    "borderColor": "#88FFFFFF",
    "borderWidth": 2,
    "textColor": "#FFFFFFFF"
  },
  "buttons": [
    {
      "id": "jump",
      "label": "跳",
      "kind": "KEY_HOLD",
      "code": 32,
      "x": 0.90,
      "y": 0.70,
      "sizeDp": 64,
      "style": {
        "gradient": ["#CCFF8AC8", "#CC88CCFF"],
        "gradientOrientation": "tl_br",
        "borderWidth": 2,
        "borderColor": "#FFFFFFFF"
      }
    }
  ],
  "joystick": { "x": 0.13, "y": 0.80, "sizeDp": 150 },
  "floatingBall": { "x": 0.96, "y": 0.38 },
  "gestureQuick": { "x": 0.96, "y": 0.30 }
}

旧客户端无 icon/style 接口时仍可加载布局,只是忽略绘制字段。

4. 问候语 / 图标 / 字体:具体判定规则

4.1 问候语

代码在进入/回到主页时执行(onResume)。判定顺序:

  1. 扫描 ui-plugins/*/ 下所有已安装插件。
  2. 跳过带 .disabled 的目录。
  3. 读取各自清单;任一启用插件的 homeGreetingByTime == true 即生效。
  4. 取手机本地时区的小时 HOUR_OF_DAY(0–23):
小时显示文案例子
hour < 11早上好07:30 → 早上好
11 ≤ hour < 17中午好12:00 → 中午好
hour ≥ 17晚上好20:15 → 晚上好
  • 未启用任何问候语插件时:固定显示「欢迎使用 Booxin」。
  • 装了但点了「禁用」:等同未启用。
  • 多个插件都开了该 feature:只要有一个启用即可(并集)。

4.2 customLauncherIcon(主页品牌图标)

只替换主页左侧品牌圆标,不会改 Android 桌面上的应用图标。

  1. 启用插件且 customLauncherIcon == true
  2. 按名称排序后取第一个找到有效图片的插件。
  3. 图片路径优先用清单 launcherIcon(或 icon);未写则依次尝试: icon.png / icon.webp / icon.jpg / icon.jpeg / launcher-icon.png / assets/icon.png
  4. 找不到可用图 → 回退默认 ic_launcher_round
{
  "id": "my-brand-icon",
  "name": "自定义主页图标",
  "version": "1.0.0",
  "type": "ui",
  "launcherIcon": "icon.png",
  "features": {
    "customLauncherIcon": true
  }
}

4.3 customFont(界面字体)

只替换启动器 App 内文字(主页、商店、设置、聊天等),不改 Android 系统字体,也不改游戏内字体。 等宽日志区域会保留 monospace。

  1. 启用插件且 customFont == true
  2. 按名称排序后取第一个找到有效字体文件的插件。
  3. 路径优先用清单 font(或 fontFile);未写则依次尝试: font.ttf / font.otf / fonts/font.ttf / fonts/font.otf / assets/font.ttf / assets/font.otf
  4. 支持扩展名:.ttf.otf.ttc。请确认字体许可允许分发。
  5. 启用/禁用/卸载后会立即重刷当前界面;若个别页面未变,切页或回前台即可。
{
  "id": "my-ui-font",
  "name": "自定义界面字体",
  "version": "1.0.0",
  "type": "ui",
  "font": "fonts/MyFont.ttf",
  "features": {
    "customFont": true
  }
}

4.4 customTheme(完整主题包,权限最大)

customTheme(或清单里写了 theme 对象)后,同一包还可直接带上 图标 / 字体文件,无需再单独开 customLauncherIcon / customFont

  • theme.brandName:顶栏品牌文字
  • theme.welcome*:主页欢迎语(可按时段)
  • theme.homeLaunchText / homeSwitchVersionText / homeAccountText:主页按钮文案
  • theme.homeStatusText / homeSelectedVersionLabel:主页状态与「当前版本」标签
  • theme.hideOrbs:隐藏背景装饰光斑
  • theme.colors.*:主色 / 文字色 / 按钮玻璃色 / 导航选中色等(#RRGGBB#AARRGGBB
  • theme.nav.*:顶栏各页文案
  • theme.backgroundImage / backgroundVideo:覆盖设置里的内置壁纸
  • theme.backgroundAlpha:0~1,默认 0.85
  • theme.applyAllText:默认 true,把文字色铺到界面 TextView

插件不能运行任意代码;只能改启动器已接线的这些字段。想加新能力需要发版启动器。

多个主题包同时启用时,按插件名称排序取第一个。

5. 本地自测(不上架)

5.1 ADB 推送 UI 插件

电脑已装 platform-tools,手机开 USB 调试,启动器包名为 com.booxin.launcher

# 在电脑当前目录放好 booxin-plugin.json

adb shell mkdir -p /data/data/com.booxin.launcher/files/booxin-runtime/ui-plugins/my-greeting

# 无 root 时优先用 run-as(debug 包通常可用;release 可能受限)
adb shell run-as com.booxin.launcher mkdir -p files/booxin-runtime/ui-plugins/my-greeting

adb push booxin-plugin.json /sdcard/booxin-plugin.json
adb shell run-as com.booxin.launcher cp /sdcard/booxin-plugin.json \
  files/booxin-runtime/ui-plugins/my-greeting/booxin-plugin.json

adb shell run-as com.booxin.launcher sh -c \
  "echo $(date +%s) > files/booxin-runtime/ui-plugins/my-greeting/.ready"

然后:打开启动器 → 插件 → 本机插件 → 点「刷新」→ 回主页看文案。

测禁用:

adb shell run-as com.booxin.launcher sh -c \
  "echo 1 > files/booxin-runtime/ui-plugins/my-greeting/.disabled"

测卸载:

adb shell run-as com.booxin.launcher rm -rf \
  files/booxin-runtime/ui-plugins/my-greeting

5.2 渲染器本地导入

  1. 启动器 → 插件 → 左侧「本机渲染器」。
  2. 点「导入 APK」。
  3. 选你的 .apk
  4. 成功后列表出现名称、版本、类型「渲染器」、状态「已安装/已启用」。

UI 插件更省事的新建/打包见文末 附录 · Booxin Studio;渲染器请用本页「导入 APK」。

6. 渲染器 / 驱动:具体打包要求

6.1 APK 内部结构(按这个做)

my-renderer.apk
├── plugin.json                 ← 推荐(也认 assets/plugin.json)
├── AndroidManifest.xml
└── lib/
    ├── arm64-v8a/              ← 真机主流,强烈建议有
    │   ├── libmygl.so          ← 文件名 = glLib
    │   └── (其它依赖 .so)
    └── armeabi-v7a/            ← 可选
        └── libmygl.so

6.2 plugin.json 读写位置

客户端按顺序找:

  1. assets/plugin.json
  2. plugin.json(APK 根)

都没有时,会按 so 文件名猜(含 gl4es / ltw / angle / OSMesa / mobileglues 等),不稳定,别靠猜。

6.3 推荐完整清单

{
  "id": "my-gl-renderer",
  "name": "My GL Renderer",
  "version": "1.0.0",
  "type": "RENDERER",
  "glLib": "libmygl.so",
  "eglLib": "libEGL.so",
  "rendererToken": "opengles3",
  "libGlEs": "3",
  "kindName": null,
  "disguiseAsGl4es": false,
  "extraEnv": {
    "LIBGL_ES": "3"
  }
}
字段要求具体含义
id 必需 安装目录名:…/booxin-runtime/plugins/<id>/(并可能镜像到 renderers/<id>/
glLib 必需 主库文件名。解压后目录里必须有这个文件,否则报「插件缺少 xxx」
type 建议 清单枚举用 RENDERER / DRIVER;商店申请填小写 renderer / driver
eglLib 可选 默认 libEGL.so
rendererToken 可选 默认 opengles3;给启动链路识别后端
libGlEs 可选 默认 "3"(字符串)
extraEnv 可选 启动游戏时额外环境变量
disguiseAsGl4es 可选 默认 false;gl4es 类方案再开

6.4 ABI 提取顺序(客户端行为)

  1. 先按设备 Build.SUPPORTED_ABIS 顺序找 lib/<abi>/*.so
  2. 某个 ABI 解出至少一个 so 就停,不再解其它 ABI。
  3. 只解一层文件名(不要 lib/arm64-v8a/subdir/a.so)。
  4. 解压后检查是否存在 glLib;没有则尝试在已解压 so 里找近似名并复制改名。

6.5 可选 Manifest 元数据

<meta-data android:name="booxin.plugin" android:value="renderer" />
<meta-data android:name="org.lwjgl.opengl.libname" android:value="libmygl.so" />

用于扫描「本机已安装的第三方渲染器插件 APK」。普通导入本地 APK 主要仍看 plugin.json + so。

7. 商店点「下载安装」时,客户端具体怎么走

下载始终在启动器内部完成(不跳系统浏览器),并自动跟随 HTTP 重定向(短链 / CDN 跳转可用)。

  1. 读上架记录的 downloadUrl(空则提示缺少下载链接)。
  2. 在 App 内下载文件(支持重定向;最终 URL / Content-Disposition / Content-Type 会参与判断)。
  3. 再判定包类型并安装:
    • renderer / driver → 按 APK 装进「本机渲染器」
    • URL/响应头像 .apk,或包内有 AndroidManifest.xml / classes.dex → APK
    • 包内有 booxin-plugin.json,或类型为 UI 类 / 其它未知 → 按 UI zip 装进「本机插件」
商店 typeURL 建议结果
ui https://…/xxx.zip、短链重定向到 zip、或启动器上传 App 内下载 →「本机插件」
renderer https://…/xxx.apk 或重定向到 apk App 内下载 →「本机渲染器」
任意 网盘「分享页」HTML(不是文件直链/跳转) 会下到网页内容导致安装失败;请用真正的文件下载链

短链可以,但最终必须落到可下载的 zip/apk 文件。UI 包务必含 booxin-plugin.json; 渲染器用 renderer/driver

8. 申请上架:逐步点哪里、填什么

  1. 启动器登录联机账号(未登录不能提交)。
  2. 底部导航点「插件」。
  3. 左侧点「申请上架」(或底部申请按钮,以你版本文案为准)。
  4. 第 1 步填:
    • 插件名称:商店显示名,例如「按时段问候」。
    • 类型 / 分区:UI 选「UI 插件」;渲染器选「渲染器」。
    • 简介:写清用途 + 使用步骤 + 能力边界。
  5. 第 2 步:上传文件(≤250MB)或填 HTTPS 外链(可只填一种)。
  6. 提交成功提示「申请已提交,请等待审核」。
  7. 在「我的申请」可看状态:审核中 / 已通过 / 未通过(未通过有原因)。

简介可直接套用

【功能】启用后,主页欢迎语按本地时间显示早上好/中午好/晚上好。
【安装】商店下载安装 → 左侧「本机插件」保持「已启用」→ 回到主页查看。
【关闭】本机插件 → 禁用 或 卸载。
【说明】本插件不会修改主题色;当前版本支持问候语 / 主页品牌图标 / 界面字体。
【包格式】zip,内含 booxin-plugin.json,id=my-greeting。

9. 类型对照表

申请 type中文交付物装到哪下载路径备注
uiUI 插件zip + 清单本机插件按 UI zip 安装
control操控/虚拟按键zip + controlLayout;可选 icon / style本机插件启用后进游戏套用布局与绘制
overlay悬浮窗/HUDzip本机插件按 UI zip 安装
utility工具zip本机插件按 UI zip 安装
input输入法/键鼠zip本机插件URL 请带 .zip
pack整合包附属zip本机插件URL 请带 .zip
other其他视情况本机插件或打开链接URL 请带后缀
renderer渲染器apk + so本机渲染器URL 需含 .apk
driver驱动apk + so本机渲染器URL 需含 .apk

10. 常见报错 / 现象对照

你看到的常见原因怎么改
缺少 booxin-plugin.json zip 结构错、文件名大小写错、双重压缩 按第 2 节重打包,打开 zip 确认第一层有清单
plugin id 为空 清单没写 id 或写成空 补上非空 id
无效的插件包 文件长度为 0 / 不是有效 zip 重新压缩,别传空文件
插件缺少 libxxx.so APK 无对应 ABI,或 glLib 文件名不一致 补 arm64-v8a,并对齐 glLib
装上了主页仍是「欢迎使用 Booxin」 未开 feature、已禁用、没回到主页 检查 features、启用状态、切换一次主页
开了 customLauncherIcon 图标不变 缺图 / 路径写错 / 被别的插件抢先 / 未回主页 确认 zip 内有图;禁用其它图标插件;切回主页
开了 customFont 字体不变 缺字体文件 / 扩展名不对 / 被禁用 / 损坏的 ttf 确认包内有 .ttf/.otf;用 Studio validate;切页重进
桌面应用图标没变 预期行为 该 feature 只改主页内品牌标,不改系统桌面图标
下载失败 / 安装失败 链接最终不是 zip/apk(HTML 分享页)、或包结构不对 用可跟随重定向的文件下载链;确认包内清单;见第 7 节
UI 安装失败但进度走完 下到的是 HTML 分享页 换真正文件链,或 ≤250MB 用启动器上传

11. 发布前逐条勾

  • UI:zip 内能直接看到 booxin-plugin.jsonid 非空
  • 问候语:真机验证 启用→主页文案变 / 禁用→恢复默认
  • 图标:真机验证 启用→主页左侧圆标变 / 禁用→恢复默认
  • 字体:真机验证 启用→界面文字变 / 禁用→恢复默认;确认许可可分发
  • 主题包:品牌名、配色、导航/主页按钮文案、壁纸、hideOrbs 至少验证一项可见变化
  • 渲染器:arm64-v8a 下存在与 glLib 同名的 so;可用「导入 APK」装上
  • 商店 type 与包格式一致;下载链最终能落到 .zip / .apk(可用短链重定向)
  • 简介写了「会做什么 / 不会做什么」,不夸大未接线能力
  • 更新版本时保持同一 id,只改 version
  • 无恶意行为;资源与库许可合规

附录 · Booxin Studio(微型 IDE)

官方插件工具:编辑项目、校验清单、一键打包 zip。绿色包免装 Node(Windows)。 前往下载

包内两个版本

文件适合谁怎么用
BooxinStudio.exe 推荐 日常开发 微型 IDE:主页打开项目 / 历史;顶部一键打包
BooxinStudio-CLI.exe 脚本 / 终端 在命令行传入子命令(见下)

推荐流程(窗口版 2.0)

  1. 解压绿色包,双击 BooxinStudio.exe
  2. 主页点「打开项目」或「新建主题包」;也可双击最近历史进入。
  3. 在左侧文件树双击编辑 booxin-plugin.json 等文本,按 README 放入资源。
  4. 点顶部「一键打包」(或 Ctrl+B),保存 zip。
  5. 手机 Booxin →「插件」→ 本机安装或走「申请上架」上传该 zip。

命令行版示例

BooxinStudio-CLI.exe help
BooxinStudio-CLI.exe new theme
BooxinStudio-CLI.exe new theme D:\plugins\cool-theme cool-theme
BooxinStudio-CLI.exe pack
BooxinStudio-CLI.exe pack D:\plugins\cool-theme D:\plugins\cool-theme.zip
BooxinStudio-CLI.exe validate D:\plugins\cool-theme

注意

  • zip 根目录必须能直接看到 booxin-plugin.json(不要多套一层空文件夹)。
  • 装到手机请用启动器安装 zip;命令里的 push 依赖 run-as,正式版常失败,仅 debug 用。
  • 插件只能改启动器已接线的字段,不能运行任意代码;新能力需等启动器发版。

打好的 zip 结构不确定时,先 validate 再上传商店,可少踩「安装失败」。