Har 包
HAR(Harmony Archive)是静态共享包,可以包含代码、C++ 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
-
使用场景
- 作为二方库,发布到OHPM 私仓,供公司内部其他应用使用。
- 作为三方库,发布到 OHPM 中心仓,供其他应用使用。
-
HAR 开发约束限制
- HAR 不支持 UIAbility、ExtensionAbility 组件和 pages 页面。
- HAR 不支持在 build-profile.json5 文件的 buildOption 中配置 worker。
- FA 模型与 Stage 模型的 HAR 不支持相互引用。
- Stage 模型的 HAR,不能引用 AppScope 内的内容。在编译构建时 AppScope 中的内容不会打包到 HAR 中,因此会导致 HAR 资源引用失败。
开发介绍
- 创建一个工程
- 工程里加模块
- 选择 staticlibrary,就是静态库
- 打开 native 的开关就是支持 nativec++,也就支持 ndk
- 在主工程里导入 library 工程
- 修改代码导出控件,方法
// library 工程里修改 ------------------------------------------
// src/main/ets/components/mainpage/MainPage.ets
export struct AddCom {
......
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(this.na, this.nb));
this.na += 1;
this.nb += 2;
this.message = "AddCom = " + testNapi.add(this.na, this.nb);
})
// src/main/ets/components/mainpage/Caculate.ets
import hilog from '@ohos.hilog';
import testNapi from 'liblibrary.so';
export namespace Caculator {
export function add(a: number, b: number) {
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(a, b));
return testNapi.add(a, b);
}
}
// Index.ets
export { AddCom } from './src/main/ets/components/mainpage/MainPage'
export { Caculator } from './src/main/ets/components/mainpage/Caculate'
// library 工程里修改 ------------------------------------------
// 主项目里导入
import { AddCom, Caculator } from 'library'
.....
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.info(0x0000, 'testTag', 'Test Har 2 + 3 = %{public}d', Caculator.add(this.na, this.nb));
this.na += 10
this.nb += 10
this.message = "2+3=" + Caculator.add(this.na, this.nb)
})
- 结果
总结
可以利用 OpenHarmony 的 hsp 和 har,包装组件和对应的 NDK 工程,提供给其他应用进行开发和应用。
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习知识点,请移步前往小编:
https://gitee.com/MNxiaona/733GH/blob/master/jianshu