历史协议 V1(旧包兼容)
历史协议 V1(旧包兼容)
本页目录
以下为历史 V1 字段与限制,仅供读取旧包和迁移,不是当前创作规范。新作品请使用 V2。旧包不能仅把版本号 1 改成 2。
包的目录结构
manifest.json
LICENSE.txt
README.md
assets/
preview.png
background.jpg
background-dark.jpg
icons/
home.png
home-dark.png
home-selected.png
home-selected-dark.png
这是一份部分主题的目录示意,完整包还需要其他图标。说明文件可选且须使用 UTF-8;图片只能放在 assets/ 下。安全文件名只使用 ASCII 字母、数字、点、下划线和连字符,每一段以字母或数字开头。
最小的配色主题
下面是可通过清单校验的配色主题示例;还须提供真实的 assets/preview.png 图片才能打包。它有意不替换图标或背景。
{
"schemaVersion": 1,
"id": "quiet-garden",
"version": 1,
"name": "Quiet Garden",
"description": "安静的花园配色",
"author": "Your Name",
"license": "CC-BY-4.0",
"preview": "assets/preview.png",
"palette": {
"primary": "#426B52",
"secondary": "#A16B4F",
"tertiary": "#617788"
}
}
授权示例不自动赋予素材许可;换成你实际拥有的许可与署名。
清单字段
| 字段 | 要求 |
|---|---|
schemaVersion |
固定为整数 1 |
id |
最长 48 字符,小写字母开头,仅小写字母、数字、单个分隔连字符;不能用内置 ID |
version |
正整数,更新同一主题时递增 |
name / author |
必填,各最多 60 个 UTF-16 单位 |
description |
可省略或为空,最多 300 个 UTF-16 单位 |
license |
必填,最多 120 个 UTF-16 单位 |
preview |
固定路径 assets/preview.png |
palette |
可选,提供时必须同时有 primary、secondary、tertiary;颜色为 #RRGGBB |
palette.name |
可选,配套配色的名称,最多 60 个 UTF-16 单位;省略时使用主题 name |
palette.topBar |
可选,为书库、发现(含第二行)和搜索页的共用横排选择按钮单独配色;至少提供下述一项 |
iconScale |
可选数值 0.75~1.2,作者推荐的贴图大小;省略为 1.0(100%),不改变按钮、文字或背景 |
icons |
可选,只接受素材清单中的 80 个键 |
artwork |
可选,只接受 pageBackground 与 navigation |
文本不允许首尾空白、换行或控制字符;emoji 等字符可能占两个 UTF-16 单位。内置 ID original、tidal、botanical、celestial 保留使用。主题必须至少提供配色、图标或背景之一;不接受未知字段。
命名沿用协议的 camelCase 与稳定动作语义,例如 topBar、selectedBackground、darkAsset、readAloud。书库、发现和搜索共用 topBar,不另造页面专属别名。新增能力保持可选;已有作品只补本次需要的字段,不需要补齐后续新增槽位,也不因新增可选字段提升 schemaVersion。
可选项按需省略:缺图标槽使用 App 原系统图标;缺 selected 使用 normal,缺 darkAsset 使用该状态的 asset。页面底图缺失时保留原渐变/底色;导航装饰缺失时不叠图。没有 palette 则应用素材时保留用户当前配色;palette.name 缺省使用作品名。topBar 整块或单个角色缺省使用现有 ColorScheme/材质颜色规则,调用方显式覆盖优先。iconScale 缺省为 1.0,已保存的用户覆盖优先。身份、版本、作者、许可、预览及至少一种配色/图标/背景内容仍必需;声明了 palette 时三个基础色必须齐全。合法省略与坏声明不同:引用不存在或损坏的文件仍须报错,不能当成可选项忽略。
横排按钮的普通和选中配色
在 palette 中加入 topBar,即可为书库分组、发现分类及来源、搜索过滤等共用横排选择按钮设置颜色:
"topBar": {
"background": "#E6EDF2",
"foreground": "#234A73",
"selectedBackground": "#234A73",
"selectedForeground": "#FFFFFF"
}
background / foreground 是普通状态的底色及文字/图标色;selectedBackground / selectedForeground 是选中状态的底色及文字/图标色。四项均可省略,但对象至少有一项,颜色严格使用 #RRGGBB。未提供的字段保留 App 的默认计算,不接受空对象、未知字段或 null。它控制按钮本身;页面顶栏、布局和玻璃/实底偏好继续由 App 管理。请检查两种材质、浅深外观下的文字与图标对比度。
旧版 App 会严格拒绝 topBar;需要兼容旧版时省略此字段。V1 的同一组颜色用于浅深外观;公开模板和投稿仍为 V1。
图标与背景的写法
配色可按需提供;声明 palette 时仍需三个基础色。导入后,App 的配色列表会新增配套配色,默认与
贴图主题同名;例如 name 是“静岸”,配套配色也叫“静岸”。如需不同名称,在
palette 中增加 "name": "静岸暮色",并保留三个颜色字段。
选择贴图主题会默认选中它的配套配色;之后可以单独换成其他配色,重新选择贴图时
再次恢复配套配色。旧的无配色部分包保持当前颜色。旧版 App 尚不接受 palette.name,
自定义名称需要本次或更新的 App;默认同名包不需要增加字段。
把下面两个字段合入你的清单;这个片段只展示一个图标,不是完整主题。
{
"icons": {
"home": {
"normal": {
"asset": "assets/icons/home.png",
"darkAsset": "assets/icons/home-dark.png"
},
"selected": {
"asset": "assets/icons/home-selected.png",
"darkAsset": "assets/icons/home-selected-dark.png"
}
}
},
"artwork": {
"pageBackground": {
"asset": "assets/background.jpg",
"darkAsset": "assets/background-dark.jpg"
},
"navigation": {
"asset": "assets/background.jpg",
"darkAsset": "assets/background-dark.jpg"
}
}
}
槽位有 normal 才有效;selected 与 darkAsset 都是可选的。精确回退顺序为:先选择 selected(缺失则 normal),再选择这个状态的 darkAsset(缺失则该状态的 asset)。缺少整个槽位则显示 App 原有图标。注意:选中状态缺深色图,不会转去用普通状态的深色图。
图片与 ZIP 限制
| 项目 | 上限或要求 |
|---|---|
| ZIP 压缩大小 / 展开大小 | 10 MiB / 20 MiB |
| ZIP 条目 | 512 个,目录也计数 |
manifest.json |
64 KiB |
| 全部被引用图片 | 总计 2400 万解码像素,共用同一路径只计算一次 |
| 图标 | 正方形,最大 512×512,必须包含透明通道 |
| 背景 | 每边最大 2048 |
| 预览 | PNG,每边最大 1600 |
| 图片格式 | 静态 PNG、JPEG、WebP,真实格式必须匹配扩展名 |
不允许 SVG、GIF、字体、脚本、远程 URL、加密 ZIP、符号链接、重复或大小写冲突路径、路径穿越和未被引用的图片。SVG 原稿需要先导出透明 PNG 或 WebP。说明文件不要另造未支持的文件名。
机器可读参考
下载 V1 字段 Schema 与槽位表。它与公开 Skill 从服务端实际校验模型生成;完整模板始终是这一份。schemaVersion 是协议,version 是主题的升级序号,两者不可混用。
图标大小与本地测试
可在清单根部写 "iconScale": 0.9 推荐 90% 大小。它是相对 App 默认贴图尺寸的绝对比例,不与用户设置相乘。用户可在「外观设置」中调整 75%~120%,按主题分别记忆;「恢复作者推荐」清除用户覆盖值。只含配色、没有图标的包不受缩放影响。旧版 App 严格拒绝这个新可选字段;需要兼容旧 App 时省略,使用默认大小。
从本地测试到市场上架始终沿用同一主题 id,发布新正式版本时递增 version。新版 App 的「我的主题」按 ID 显示一张卡片,版本页可保留同版本的不同内容:本地测试稿和市场正式版分别标注。完全相同的包复用;安装正式版不会覆盖不同的测试稿。名称相同但 ID 不同不会自动合并。安装来源由客户端校验与收据记录,不可在清单中伪造。
发现文档中的问题? 提出修正