鸿蒙应用模块化架构:ABC/HAP/HAR/HSP/APP技术透视

72 阅读4分钟

鸿蒙应用模块化架构: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 分发包,完成商店上架与终端交付。