本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、HAR(静态共享包)

  • HAR 是静态共享包,全称 Harmony Archive

  • 可以包含代码、C++库、资源和配置文件

  • 主要用于实现多个模块或多个工程之间共享 ArkUI 组件、资源等相关代码

与 HAP 的区别

  • HAR 不能独立安装运行在设备上

  • 只能作为应用模块的依赖项被引用

二、HAR 模块工程结构

HAR模块名称/
├── libs/                          # 存放编译后的 .so 文件
├── src/
│   └── main/
│       ├── cpp/
│       │   ├── types/             # 存放 C++ API 描述文件
│       │   │   └── liblibrary/    # 按 so 库维度划分的子目录
│       │   │       ├── Index.d.ts # 描述 C++ 接口的方法名、参数、返回值
│       │   │       └── oh-package.json5 # so 包的声明入口和包名信息
│       │   ├── CMakeLists.txt     # CMake 构建脚本配置文件
│       │   └── napi_init.cpp      # 共享包 C++ 代码源文件
│       └── Index.ets              # 共享包导出声明的入口文件
└── (其他配置文件)

各目录/文件说明:

  • libs:用于存放编译生成的 .so 动态库文件

  • src/main/cpp/types:按 so 库名称组织,存放 C++ API 的类型定义文件

  • Index.d.ts:描述 C++ 接口的详细规范(方法名、入参类型、返回类型)

  • oh-package.json5:声明 so 三方包的入口和名称

  • CMakeLists.txt:配置 C++ 代码的编译规则

  • napi_init.cpp:C++ 功能的实现源码

  • Index.ets:HAR 对外的 ArkUI 导出入口

三、创建 HAR 模块

3.1 创建步骤

  1. 右键工程目录顶部 → 选择 New > Module

  2. 在 Choose Your Ability Template 界面中,选择 Static Library → 点击 Next

  3. 在 Configure New Module 界面中,配置以下信息后点击 Finish

3.2 模块配置参数

  • Module name:设置 HAR 模块的名称(例如 MyUtils

  • Device type:选择该 HAR 支持的设备类型(如 Phone、Tablet)

  • Enable native:是否启用 C++ 代码支持

  • C++ Standard:仅在开启 Enable native 时需配置,可选:

    • Toolchain Default

    • C++11

    • C++14

注意:从 DevEco Studio 6.0.1 Beta1 开始,创建 HAR 模块时支持选择 C++ 版本。

四、编译 HAR 模块

4.1 编译方法

  1. 在 Project 窗口中选中要编译的 HAR 模块(例如 mylibrary)。

  2. 通过菜单栏选择 Build > Make Module 'mylibrary'

  3. 编译完成后,会在模块下的 build 目录中生成 *.har 格式的包文件。

4.2 编译输出

  • 生成的 HAR 包可供当前工程的其他模块引用

  • 也可上传至 ohpm 仓库,供其他开发者下载使用

五、注意事项

5.1 编译说明

  • C++ 代码处理:编译时不会直接将 C++ 源码打包进 HAR,而是将其编译成 .so 文件,并放置在 HAR 包的 libs 目录下

  • 资源联想依赖:编译过程中会生成 ResourceTable.txt 资源索引文件。必须使用 DevEco Studio 构建 HAR,否则编辑器无法对 HAR 中的资源进行代码联想

  • 本地依赖打包

    • 若使用 Hvigor 2.5.0-s 及以上版本,编译时会自动将 dependencies 中位于本模块路径下的本地依赖打包进 HAR

5.2 排除文件

  • 若部分源码或资源文件不需要打包到 HAR 中,可创建 .ohpmignore 文件,在其中配置要忽略的文件或文件夹路径

六、总结

开发 HAR(静态共享包)的主要流程:

  1. 创建模块:通过 DevEco Studio 新建 Static Library 类型的模块,配置名称、设备类型及 C++ 支持。

  2. 开发编码:在生成的目录结构中添加 ArkUI 组件、C++ 代码或资源文件。

  3. 编译构建:使用 Build > Make Module 生成 .har 文件。

  4. 使用共享:将 HAR 包用于工程内其他模块依赖,或发布到 ohpm 供外部使用。

   HAR 是实现代码复用的重要机制,尤其适合于基础组件、通用工具类或底层 C++ 能力的封装与共享。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐