鸿蒙(Harmony)每种ABility的中作用

在鸿蒙(HarmonyOS)开发中,‌Empty Ability‌、‌Native C++‌、‌Shared Library‌、‌Static Library‌ 是常见的工程模板或模块类型,以下是它们的核心特点及使用场景:

1. ‌Empty Ability‌

定义‌

用于创建应用的入口模块,包含应用的启动界面、图标及主功能逻辑,编译后生成 entry 类型的 HAP(Harmony Ability Package)包‌。

特点‌

每个应用同一设备类型仅允许一个 entry 类型的 HAP 包‌。
通过 DevEco Studio 的 ‌New > Module‌ 选择 ‌Empty Ability‌ 模板创建‌。
适用场景‌:作为应用的入口模块,实现主界面和核心功能‌。

2. ‌Native C++‌

定义‌

支持使用 C/C++ 语言开发高性能代码(如算法、图形渲染等),编译后集成到 HAP 包中‌。

特点‌

需通过 Native API 与 ArkUI 层交互。
创建时选择 ‌Native C++‌ 模板,生成包含 C++ 代码的模块‌。
适用场景‌:需要高性能计算的场景,如游戏引擎、音视频处理等‌。

3. ‌Shared Library(HSP)‌

定义‌

即 ‌Harmony Shared Package(HSP)‌,支持代码和资源的动态共享,编译后生成独立的 .hsp 文件‌。

特点‌

跨 HAP 共享‌:多个 HAP 可依赖同一 HSP,运行时仅加载一份代码,减少冗余‌。
独立编译‌:与主应用解耦,支持按需分发和更新‌。
创建时选择 ‌Shared Library‌ 模板,module.json5 中 type 标记为 shared‌。
适用场景‌:多应用共享公共组件或服务(如 UI 组件库、网络模块)‌。

4. ‌Static Library(HAR)‌

定义‌

即 ‌Harmony Archive(HAR)‌,静态共享包,包含代码、资源及配置文件,编译时直接打包到 HAP 中‌。

特点‌

强耦合‌:依赖 HAR 的模块需重新编译,无法独立更新‌。
创建时选择 ‌Static Library‌ 模板,module.json5 中 type 标记为 har‌。
适用场景‌:模块化开发时复用代码(如工具类、自定义控件),简化项目管理‌。

对比总结‌

类型编译方式运行时行为更新策略经典场景
‌ Empty Ability‌打包为 entry HAP应用主入口随应用整体更新主界面、核心功能逻辑‌
‌ Native C++‌集成到 HAP直接运行随应用整体更新高性能计算模块‌
‌Shared Library‌独立编译为 HSP多 HAP 共享同一实例独立更新跨应用公共组件‌
‌Static Library‌编译到依赖的 HAP代码复制到各依赖模块需重新编译主应用项目内代码复用‌
维度‌Empty Ability‌‌Native C++‌‌ Shared Library (HSP)‌‌Static Library (HAR)‌
‌编译产物‌entry.hap.so 动态库‌ .hsp 共享包.har 静态包
‌代码复用‌不可复用‌通过动态链接复用‌ 跨应用动态共享项目内静态复制
‌更新策略‌随应用整体更新需重新编译主‌ HAP 独立更新需重新编译主 HAP
性能影响‌高性能,低延迟‌ 中等(动态加载)无额外开销
‌典型场景‌应用主入口‌图形渲染、算法计算‌ 跨应用 UI 组件库项目内工具类

实际开发中的选择

‌Empty Ability模板‌ → 创建项目骨架。

Native C++代码‌ → 使用C++编写核心逻辑。

‌Shared/Static库‌ → 根据需求选择动态或静态链接:

  • Shared Library‌:模块需跨应用复用,或希望独立更新。
  • Static Library‌:代码稳定,或简化部署流程。

Empty Ability(主模块)‌

‌代码示例‌:

// 作用‌:应用入口,提供主界面和导航功能。// 编译结果‌:生成 entry.hap,包含主界面和基础逻辑。
// entry/src/main/ets/pages/Index.ets  
@Entry
@Component
struct Index {
  build() {
    Column() {
      // 使用HAR中的工具类
      Text(StaticLib.getGreeting())
        .fontSize(30)

      // 使用HSP中的共享组件
      SharedComponent()

      // 调用Native C++方法
      Button('Call Native')
        .onClick(() => {
          const result = nativeLib.add(3, 5)
          console.log('Native Result: ' + result)
        })
    }
  }
}

‌Native C++(高性能模块)‌

// 作用‌:实现心率计算算法(需高性能)。// 调用方式‌:通过 Native API 与 JS 层交互。
// 编译结果‌:生成 .so 动态库,打包到 entry.hap 中。
// native/src/main/cpp/native_lib.cpp
#include "napi/native_api.h"

// C++ 加法函数
static napi_value Add(napi_env env, napi_callback_info info) {
  // 获取参数
  size_t argc = 2;
  napi_value args;
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

  // 解析参数
  double a, b;
  napi_get_value_double(env, args, &a);
  napi_get_value_double(env, args, &b);

  // 返回结果
  napi_value result;
  napi_create_double(env, a + b, &result);
  return result;
}

// 注册Native方法
napi_value Init(napi_env env, napi_value exports) {
  napi_property_descriptor desc = { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr };
  napi_define_properties(env, exports, 1, &desc);
  return exports;
}

NAPI_MODULE(native_lib, Init)

Shared Library‌(HSP)

// shared/src/main/ets/components/SharedComponent.ets
@Component
export struct SharedComponent {
  build() {
    Text('From HSP')
      .fontColor(Color.Blue)
      .margin(10)
  }
}

// shared/oh-package.json5
{
  "name": "shared",
  "version": "1.0.0",
  "type": "shared" // 关键配置
}

Static Library (HAR)

// static/src/main/ets/utils/StaticLib.ets
export class StaticLib {
  static getGreeting(): string {
    return "Hello from HAR!"
  }
}

// static/oh-package.json5
{
  "name": "static",
  "version": "1.0.0",
  "type": "har" // 关键配置
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丝雨花开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值