OpenHarmony实战开发——引入开源C/C++库之Har包里的NDK

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 资源引用失败。

开发介绍

  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)
               })
  2. 结果

总结

可以利用 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.鸿蒙南向开发方向

相关推荐
cellurw6 分钟前
Day39 SQLite数据库操作与HTML核心API及页面构建
数据库·sqlite·html
小蒜学长16 分钟前
旅行社旅游管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·旅游
Mr_hwt_12321 分钟前
基于mybatis-plus动态数据源实现mysql集群读写分离和从库负载均衡教程(详细案例)
数据库·spring boot·mysql·mybatis·mysql集群
万邦科技Lafite32 分钟前
实战演练:通过API获取商品详情并展示
大数据·数据库·python·开放api接口
黄焖鸡能干四碗1 小时前
智慧教育,智慧校园,智慧安防学校建设解决方案(PPT+WORD)
java·大数据·开发语言·数据库·人工智能
敲上瘾1 小时前
Docker 存储卷(Volume)核心概念、类型与操作指南
linux·服务器·数据库·docker·容器·架构
神里流~霜灭1 小时前
(C++)数据结构初阶(顺序表的实现)
linux·c语言·数据结构·c++·算法·顺序表·单链表
爱笑的眼睛111 小时前
HarmonyOS声明式UI开发:深入探索ArkUI与Stage模型
华为·harmonyos
DemonAvenger1 小时前
MySQL内存优化:缓冲池与查询缓存调优实战指南
数据库·mysql·性能优化
爱笑的眼睛111 小时前
HarmonyOS应用开发:深入理解声明式UI与弹窗交互的最佳实践
华为·harmonyos