跳转到内容

加载与解析

插件在构建时写入 rawfile 产物,核心包在运行时读取并解析为类型化对象。类的签名见库 API 参考

产物

插件在每次构建时向 rawfile/ 写入一个文件。库只读取该文件,不扫描依赖。扫描器不负责渲染,库也不依赖构建系统。文件是二者之间唯一的契约。

加载顺序

同一份数据可以写成 JSON 或 MessagePack。两者编码的结构完全相同(数据模型),只是编码方式不同。JSON 可读,便于调试。MessagePack 更小,解析更快。

加载器遵循固定顺序,不提供选择:

  1. osslibraries.msgpack —— 用 Libs.fromMsgpack 解析。
  2. osslibraries.json —— 用 Libs.fromJson 解析。

项目可以发布紧凑的二进制文件,同时保留 JSON 用于调试,无需额外配置。MessagePack 文件缺失时,加载器记录一条警告并回退。该警告用于区分「文件缺失」与「解码失败」。

去重

许可证文本按内容哈希存储一份,库通过哈希引用许可证。不同包中相同的文本归并成一条共享条目,从而保持 HAP 体积较小。解析器把哈希引用对照许可证映射解析,返回的对象已经关联。

排序

插件按已排序的顺序写出库,库在加载时再次按名称(不区分大小写)排序。在加载时排序,保证数据来源不同时顺序仍然一致。

脏数据

uniqueId 是唯一必填字段。缺少它的条目会被跳过并记录日志,坏数据不会以空行形式出现。其他字段缺失时变为空字符串或空数组。

共享实例

列表和详情视图展示同一份数据,加载并解析一次即可。页面通过静态持有器 LibsHolder 把已加载的 Libs 实例传给详情视图,而不是在每次导航时重新读取文件。自定义页面可使用同一个持有器(自定义 UI)。