鸿蒙应用模块化架构:ABC/HAP/HAR/HSP/APP技术透视
ABC:应用逻辑的执行载体
ABC(Ark Bytecode,方舟字节码)是鸿蒙系统执行层的核心格式,由方舟编译器将 ArkTS/TS/JS 源代码转换而来,文件后缀为 .abc。
该字节码文件是应用逻辑的完整二进制镜像,囊括了类结构、方法实现、字段定义、调试符号、字符串常量池及所有字面量数据。针对鸿蒙应用的逆向工程均基于 ABC 文件展开——系统内置的 ark_disasm 反汇编器与 GitHub 开源项目 abc-decompiler 反编译器均直接解析此文件以还原应用细节。
鉴于裸 ABC 文件存在高度逆向风险,核心算法与业务逻辑极易暴露。建议对关键模块实施专业级加固防护,目前已知 Virbox Protector 等厂商即将提供鸿蒙应用底层字节码加密方案。
HAP:应用部署的基本单元
HAP(Harmony Ability Package)是鸿蒙应用的可部署模块,整合了代码资产、资源文件、二进制依赖及配置信息,分为两类:
- entry:应用入口模块,同一设备类型下必须唯一,支持独立安装与运行。
- feature:动态特性模块,数量可选。仅当其包含 Ability 时才具备独立调度能力。
典型 HAP 目录结构如下:
entry_default
├─ets
│ ├─modules.abc
│ └─sourceMaps.map
├─libs
│ └─arm64-v8a
│ └─libentry.so
├─resources
│ └─base
│ ├─media
│ │ ├─app_background.png
│ │ ├─app_foreground.png
│ │ ├─app_layered_image.json
│ │ ├─background.png
│ │ ├─foreground.png
│ │ └─layered_image.json
│ └─profile
│ ├─backup_config.json
│ └─main_pages.json
├─.pages.info
├─module.json
├─pack.info
├─pkgContextInfo.json
└─resources.index
ets 目录 存储编译后的 ArkTS 核心业务,modules.abc 为字节码主体,sourceMaps.map 保留源码映射。
libs 目录 按 CPU 架构(如 arm64-v8a)分级存放 native 动态库。
resources 目录 集中管理媒体、配置、国际化等资源。
根目录配置文件构成元数据体系:module.json 定义模块信息、Ability 清单与权限;pack.info 记录版本与设备适配;pkgContextInfo.json 描述构建上下文;resources.index 优化资源加载;.pages.info 管理页面路由。
pack.info 示例:
{
"summary": {
"app": {
"bundleName": "com.example.arks",
"bundleType": "app",
"version": {
"code": 1000000,
"name": "1.0.0"
}
},
"modules": [
{
"mainAbility": "EntryAbility",
"deviceType": [
"phone",
"tablet",
"2in1",
"wearable"
],
"abilities": [
{
"name": "EntryAbility",
"label": "$string:EntryAbility_label"
}
],
"extensionAbilities": [
{
"name": "EntryBackupAbility",
"forms": []
}
],
"distro": {
"moduleType": "entry",
"installationFree": false,
"deliveryWithInstall": true,
"moduleName": "entry"
},
"apiVersion": {
"compatible": 18,
"releaseType": "Release",
"target": 18
}
}
]
},
"packages": [
{
"deviceType": [
"phone",
"tablet",
"2in1",
"wearable"
],
"moduleType": "entry",
"deliveryWithInstall": true,
"name": "entry-default"
}
]
}
该文件集中暴露应用标识、版本迭代、设备覆盖范围及模块分发策略。
开发调试时,执行 hdc install package_name.hap 即可完成设备部署。
HAR与HSP:代码复用的双模策略
HAR(Harmony Archive)是静态共享方案,供多模块复用 ArkUI 组件、工具类及资源。其生命周期依附于主工程,构建时被物理复制至依赖方,无法独立部署。权限配置在编译期自动合并,避免重复声明。
HSP(Harmony Shared Package)提供动态共享能力,与宿主应用同进程、同包名、共享生命周期。多 HAP/HSP 引用同一 HSP 时,包体积仅增加一份副本;运行时支持懒加载,提升启动效率。集成态 HSP 更支持组织内跨应用共享。
核心差异对比:
| 维度 | HAR(静态共享) | HSP(动态共享) |
|---|---|---|
| 集成方式 | 编译期代码复制 | 运行时按需加载,物理隔离 |
| 体积影响 | 线性膨胀各依赖方 | 应用级单实例,全局优化 |
| 加载时机 | 主包启动时同步加载 | 支持延迟加载,加速启动 |
| 更新策略 | 强制随 HAP 版本同步 | 可独立热更新 |
| 适用场景 | 基础组件、工具集、UI 控件 | 业务插件、大型特性模块 |
APP:应用分发的最终实体
APP 文件是鸿蒙应用市场的唯一上架格式,与本地调试用的 HAP 形成明确区分。
每个 APP 包聚合一个或多个 HAP 模块,并包含描述整体属性的 pack.info 文件。标准应用至少包含一个 entry 模块,按需叠加 feature 模块。
APP 包本质为带签名的压缩容器,封装所有待分发模块及依赖的 HSP。上架版本必须采用正式发布证书签名,与开发调试证书体系分离,构成应用分发安全链的最后一环。
构建流转全景
鸿蒙应用从代码到用户的完整路径可归纳为:ArkTS/JS 源码 → 方舟编译器产出 ABC 字节码 → 字节码与资源打包成 HAP/HSP 模块 → 通过 HAR 实现编译期代码复用 → 最终签名封装为 APP 分发包,完成商店上架与终端交付。