zip文件不支持原生特殊标记,但可通过根目录下hnp.json等标准文本文件承载结构化元数据,由openharmony沙箱按预设schema解析tags字段实现加载策略控制。

ZIP 文件本身不支持“特殊标记”的元数据原生存储,但它可通过约定方式承载结构化元数据,尤其在多系统混合开发(如 OpenHarmony + Linux/macOS/Windows 协同)的沙箱环境中,关键在于利用 ZIP 的标准扩展机制 + 沙箱可识别的封装规范,而非依赖操作系统级属性。
以下是在实际开发中可行、已被 OpenHarmony 和 Agent Sandbox 场景验证的方式:
明确 ZIP 中嵌入元数据的合法路径
ZIP 格式允许在文件头或中央目录中附加自定义扩展字段(Extra Field),但跨平台兼容性差。更稳妥的做法是:
- 将元数据以标准文本文件形式打包进 ZIP 根目录(如
metadata.json或.hnp.json) - 该文件内容遵循沙箱服务可解析的 Schema(例如 OpenHarmony 的 HNP 包就要求
hnp.json描述 native 二进制依赖、ABI 类型、签名策略等) - 文件名带前缀或后缀不改变 ZIP 结构,但能被沙箱加载器识别(如
@meta:build-info.json)
沙箱如何识别并提取这些标记
Agent Sandbox 或 OpenHarmony 的模块加载器不会自动读取任意 JSON,它依赖预设规则:
- 加载时扫描 ZIP 内是否存在
hnp.json(HNP 包规范)或sandbox.manifest(自定义沙箱描述符) - 解析其中字段,例如:
{ "platforms": ["ark-x64", "linux-arm64", "windows-x86_64"], "tags": ["debug", "signed-by-ci", "trusted-source:vendor-a"], "version": "2.3.1", "checksums": { "libnative.so": "sha256:..." } } - 这些
tags字段即为“特殊标记”,沙箱据此决定是否加载、是否启用调试日志、是否校验签名链
多系统协同时需注意的兼容细节
不同系统对 ZIP 的处理差异可能破坏元数据完整性:
- Windows 资源管理器解压默认丢弃 Unix 权限和隐藏文件(如
.xxx开头) - macOS 的
Archive Utility可能重写时间戳或添加.DS_Store - 推荐统一使用命令行工具生成 ZIP,并禁用压缩无关项:
zip -r package.hnp . -x "*.DS_Store" -x "__MACOSX/*" --no-dir-entries
- 确保
metadata.json使用 UTF-8 编码且无 BOM,避免 Linux/macOS 解析失败
实际调用示例(OpenHarmony 沙箱加载场景)
当 HAP 或 HNP 包被 BundleManager 加载时,系统会:
- 解析 ZIP 中
hnp.json→ 提取tags字段 - 若含
"trusted-source:vendor-a",则跳过本地签名验证,改用 vendor-a 的公钥池校验 - 若含
"debug",则向ohos.ability.AbilityStage注入调试上下文,开启日志透出
这种方式不依赖 ZIP 扩展字段,不挑战各系统 ZIP 实现差异,而是把元数据作为“可执行契约”显式声明,沙箱按规解析、按标执行。
不复杂但容易忽略的是:标记必须语义明确、不可歧义,且沙箱端要有对应解析逻辑——光往 ZIP 里塞个 tags.txt 是没用的,得让沙箱知道“该读哪个文件、怎么读、读了之后做什么”。











