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装进启动器后怎么验证
- 手机打开 Booxin → 底部「插件」。
- 左侧点「本机插件」(商店装完会自动切过来;ADB 推送则手动点)。
- 应看到名称「按时段问候」,详情类似:
ui · 已启用 · v1.0.0。 - 再点底部「主页」。欢迎语应变成:
- 0:00–10:59 → 早上好
- 11:00–16:59 → 中午好
- 17:00–23:59 → 晚上好
- 回「本机插件」点「禁用」→ 再回主页 → 应恢复「欢迎使用 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 | 显示文案(叠在按钮表面) |
kind | KEY_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 字段:
| 字段 | 别名 | 说明 |
|---|---|---|
backgroundColor | background / bg | 填充色 #RGB / #RRGGBB / #AARRGGBB |
borderColor | border-color | 描边色 |
borderWidth | border-width | 描边宽度(dp) |
borderRadius | radius | 圆角 dp;50%/full/circle → 圆 |
shape | — | oval / circle / rect / roundrect / pill |
gradient | — | 颜色数组(≥2);或 linear-gradient(#a,#b) |
gradientOrientation | — | tl_br / top_bottom / left_right 等 |
textColor | color | 文案颜色 |
opacity | alpha | 0.15..1 |
pressScale | press-scale / clickScale | 按下缩放 0.72..1,默认约 0.90 |
pressEffect | press-effect / clickEffect;或 "jelly": true | squash(瞬时)/ 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)。判定顺序:
- 扫描
ui-plugins/*/下所有已安装插件。 - 跳过带
.disabled的目录。 - 读取各自清单;任一启用插件的
homeGreetingByTime == true即生效。 - 取手机本地时区的小时
HOUR_OF_DAY(0–23):
| 小时 | 显示文案 | 例子 |
|---|---|---|
hour < 11 | 早上好 | 07:30 → 早上好 |
11 ≤ hour < 17 | 中午好 | 12:00 → 中午好 |
hour ≥ 17 | 晚上好 | 20:15 → 晚上好 |
- 未启用任何问候语插件时:固定显示「欢迎使用 Booxin」。
- 装了但点了「禁用」:等同未启用。
- 多个插件都开了该 feature:只要有一个启用即可(并集)。
4.2 customLauncherIcon(主页品牌图标)
只替换主页左侧品牌圆标,不会改 Android 桌面上的应用图标。
- 启用插件且
customLauncherIcon == true。 - 按名称排序后取第一个找到有效图片的插件。
- 图片路径优先用清单
launcherIcon(或icon);未写则依次尝试:icon.png/icon.webp/icon.jpg/icon.jpeg/launcher-icon.png/assets/icon.png。 - 找不到可用图 → 回退默认
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。
- 启用插件且
customFont == true。 - 按名称排序后取第一个找到有效字体文件的插件。
- 路径优先用清单
font(或fontFile);未写则依次尝试:font.ttf/font.otf/fonts/font.ttf/fonts/font.otf/assets/font.ttf/assets/font.otf。 - 支持扩展名:
.ttf、.otf、.ttc。请确认字体许可允许分发。 - 启用/禁用/卸载后会立即重刷当前界面;若个别页面未变,切页或回前台即可。
{
"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.85theme.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 渲染器本地导入
- 启动器 → 插件 → 左侧「本机渲染器」。
- 点「导入 APK」。
- 选你的
.apk。 - 成功后列表出现名称、版本、类型「渲染器」、状态「已安装/已启用」。
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 读写位置
客户端按顺序找:
assets/plugin.jsonplugin.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 提取顺序(客户端行为)
- 先按设备
Build.SUPPORTED_ABIS顺序找lib/<abi>/*.so。 - 某个 ABI 解出至少一个 so 就停,不再解其它 ABI。
- 只解一层文件名(不要
lib/arm64-v8a/subdir/a.so)。 - 解压后检查是否存在
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 跳转可用)。
- 读上架记录的
downloadUrl(空则提示缺少下载链接)。 - 在 App 内下载文件(支持重定向;最终 URL / Content-Disposition / Content-Type 会参与判断)。
- 再判定包类型并安装:
renderer/driver→ 按 APK 装进「本机渲染器」- URL/响应头像
.apk,或包内有AndroidManifest.xml/classes.dex→ APK - 包内有
booxin-plugin.json,或类型为 UI 类 / 其它未知 → 按 UI zip 装进「本机插件」
| 商店 type | URL 建议 | 结果 |
|---|---|---|
ui |
https://…/xxx.zip、短链重定向到 zip、或启动器上传 |
App 内下载 →「本机插件」 |
renderer |
https://…/xxx.apk 或重定向到 apk |
App 内下载 →「本机渲染器」 |
| 任意 | 网盘「分享页」HTML(不是文件直链/跳转) | 会下到网页内容导致安装失败;请用真正的文件下载链 |
短链可以,但最终必须落到可下载的 zip/apk 文件。UI 包务必含 booxin-plugin.json;
渲染器用 renderer/driver。
8. 申请上架:逐步点哪里、填什么
- 启动器登录联机账号(未登录不能提交)。
- 底部导航点「插件」。
- 左侧点「申请上架」(或底部申请按钮,以你版本文案为准)。
- 第 1 步填:
- 插件名称:商店显示名,例如「按时段问候」。
- 类型 / 分区:UI 选「UI 插件」;渲染器选「渲染器」。
- 简介:写清用途 + 使用步骤 + 能力边界。
- 第 2 步:上传文件(≤250MB)或填 HTTPS 外链(可只填一种)。
- 提交成功提示「申请已提交,请等待审核」。
- 在「我的申请」可看状态:审核中 / 已通过 / 未通过(未通过有原因)。
简介可直接套用
【功能】启用后,主页欢迎语按本地时间显示早上好/中午好/晚上好。
【安装】商店下载安装 → 左侧「本机插件」保持「已启用」→ 回到主页查看。
【关闭】本机插件 → 禁用 或 卸载。
【说明】本插件不会修改主题色;当前版本支持问候语 / 主页品牌图标 / 界面字体。
【包格式】zip,内含 booxin-plugin.json,id=my-greeting。
9. 类型对照表
| 申请 type | 中文 | 交付物 | 装到哪 | 下载路径备注 |
|---|---|---|---|---|
ui | UI 插件 | zip + 清单 | 本机插件 | 按 UI zip 安装 |
control | 操控/虚拟按键 | zip + controlLayout;可选 icon / style | 本机插件 | 启用后进游戏套用布局与绘制 |
overlay | 悬浮窗/HUD | zip | 本机插件 | 按 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.json,id非空 - 问候语:真机验证 启用→主页文案变 / 禁用→恢复默认
- 图标:真机验证 启用→主页左侧圆标变 / 禁用→恢复默认
- 字体:真机验证 启用→界面文字变 / 禁用→恢复默认;确认许可可分发
- 主题包:品牌名、配色、导航/主页按钮文案、壁纸、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)
- 解压绿色包,双击
BooxinStudio.exe。 - 主页点「打开项目」或「新建主题包」;也可双击最近历史进入。
- 在左侧文件树双击编辑
booxin-plugin.json等文本,按 README 放入资源。 - 点顶部「一键打包」(或 Ctrl+B),保存 zip。
- 手机 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 再上传商店,可少踩「安装失败」。