跳转至

静态 HarmonyOS 包清单

REA 通过 src/artifacts/ 中的共享加固 ZIP 构件读取器对 HarmonyOS 应用包进行清单化,然后将经过认证的清单投射为免执行的应用图。这是 HarmonyOS 路线图(#1431)的第一个增量:仅包括包识别和组件清单。

可识别的根格式:

  • .hap — 可安装的应用模块
  • .hsp — 运行时共享包
  • .app — 分发 App Pack(HAP/HSP 子项按路径列出)。App Pack 分类仅适用于已验证 ZIP 魔数的根输入;其他包(如 IPA)内以 .app 结尾的嵌套 ZIP 成员保留通用的 zip 分类。

HarmonyOS .har 共享库有意不按后缀分类:.har 也指 HTTP Archive JSON,因此 Harmony 共享归档需要已验证的 ZIP 字节,并因明确的限制而被推迟处理。

用法

无需外部 SDK、工具链或引擎。对包进行清单化并投射图;CLI 和 MCP 使用相同的工作流,并内联返回绑定构件的 Evidence:

rea inspect-artifact /path/to/Example.hap --format json > inspection.json
node --input-type=module -e 'import { readFileSync } from "node:fs"; console.log(JSON.stringify({ inventory_evidence: [JSON.parse(readFileSync("inspection.json", "utf8"))] }));' > projection-input.json
rea project-harmony-application-graph projection-input.json --format json

MCP 工具 project_harmony_application_graph 接受相同的 inventory_evidence 输入。投射报告以下内容:

  • 精确的组件路径、构件 ID 和哈希(Manifest、Ark 字节码、资源、原生库、JavaScript、签名)
  • 打包模型提示:仅当 module.json 条目位于已分类资源路径之外时才判定为 Stage,仅当 config.json 位于已分类资源路径之外时才判定为 FA,否则为 unknown
  • assets/<module>/resources/ 下的 FA 资源以及 Stage 的 resources/
  • ID 和哈希未知的不可用组件路径,包括加密条目;这些会导致投射覆盖不完整
  • 不进行递归清单化的 App Pack 子包路径
  • 来自路径和格式的运行时族提示(ark、native、javascript)
  • 字节码与 libs/<abi> 原生库之间基于路径的 N-API 桥接假设

文件和切片出现项提供组件和子包路径;目录树和符号链接在源清单中保留其身份,但不会被分类为代码文件。Ark 和 JavaScript 运行时提示汇总已分类的字节码和 JavaScript 列表;受支持的源扩展名与其组件行遵循相同的分类规则。

每项声明仅基于路径存在性。Manifest 语义(模块身份、能力、入口点、权限、依赖)、Ark 字节码内容和版本、资源解析、签名验证以及观察到的原生边界均不在本增量范围内,并保留在投射的 limitations 数组中,直到出现专门的 HarmonyOS provider。REA 对清单无法通过认证的包默认失败关闭。

验证通道

npm run fixtures:harmony 从 MIT 许可的 harmony-next-pipeline 源代码仓库 下载 SHA-256 固定的 1.0.1 HAP 发行版,存放到被忽略的 _reference/harmony-integration/ 目录。固定记录包含源修订版、发布资产 ID、大小和摘要。下载的构件不会被重新分发;捆绑的组件许可证尚未经过独立审计。

npm run fixtures:harmony
REA_HARMONY_TEST_HAP=_reference/harmony-integration/entry-default-unsigned.hap \
  npm run verify:harmony

该通道演练已编译的 CLI 和实际连接 SDK 的 stdio MCP:inspect_artifact 真实性、投射确定性、Stage 模型路径提示、精确的 Manifest/字节码/资源组件集、空的原生和桥接集、完整清单覆盖以及 CLI/MCP 一致性。它检查该测试包没有 META-INF 签名条目;但这并不能确定包是否已签名。

发布构件的编译器/SDK 版本和可重现的源码构建尚未独立确认。该通道不完成 #1431 中的固定工具链验收,也不验证 Ark 解码或签名。将 REA_HARMONY_ENTRYPOINT 设置为已安装包的 scripts/rea.mjs,即可针对该包运行相同的检查;默认通道使用仓库构建。

打包模型和 App Pack 子项存在性使用清单化的文件/切片路径,即使加密内容无法通过认证也是如此。不可用的 App Pack 子项保留其路径、格式、加密和限制,构件 ID 和摘要为 null;它们不能确立解码后的包语义。已提供页面之外的缺失源节点保留清单限制和部分覆盖。签名列表包含清单化的 META-INF RSA、DSA 和 EC 证书块路径以及现有后缀;不透明内容不能证明有效的签名或证书。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea