每种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" // 关键配置
}