OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK

时间:2024-04-15 13:10:42

Har 包

HAR(Harmony Archive)是静态共享包,可以包含代码、C++ 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

  • HAR 开发约束限制
    • HAR 不支持 UIAbility、ExtensionAbility 组件和 pages 页面。
    • HAR 不支持在 build-profile.json5 文件的 buildOption 中配置 worker。
    • FA 模型与 Stage 模型的 HAR 不支持相互引用。
    • Stage 模型的 HAR,不能引用 AppScope 内的内容。在编译构建时 AppScope 中的内容不会打包到 HAR 中,因此会导致 HAR 资源引用失败。

开发介绍

  1. 创建一个工程

  1. 工程里加模块

  1. 选择 staticlibrary,就是静态库

  1. 打开 native 的开关就是支持 nativec++,也就支持 ndk

  1. 在主工程里导入 library 工程

  1. 修改代码导出控件,方法
    // 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)
              })
  1. 结果

总结

可以利用 OpenHarmony 的 hsp 和 har,包装组件和对应的 NDK 工程,提供给其他应用进行开发和应用。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向