[HarmonyOS应用开发]Native侧通过dlopen动态加载so库

在Harmony应用开发中,开发者可以使用dlopen的方式对so库进行动态加载。

1.SO库侧

  1. EXTERN_C_START
  2. static napi_value Init(napi_env env, napi_value exports)
  3. {
  4. napi_property_descriptor desc[] = {
  5. { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
  6. };
  7. napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
  8. return exports;
  9. }
  10. // 导出Add的包装函数
  11. napi_value AddWrapper(napi_env env, napi_callback_info info) { return Add(env, info); }
  12. // 导出sumTest的包装函数
  13. int sumTestWrapper(int a, int b) {
  14. return sumTest(a, b);
  15. }
  16. EXTERN_C_END
<
cpp运行
### ArkUI NDK 工作原理 #### 动态加载机制 在 HarmonyOS 中,动态加载通过命名空间(namespace)来隔离不同类型的文件。对于 ArkUI 的 NDK 开发而言,主要涉及 `default ns` 和 `app ns`[^3]。 - **Default Namespace**: 此命名空间由系统自动创建,在应用程序启动前已经存在。它能够访问位于 `/system/lib{abi}` 或者 `/vendor/lib{abi}` 下的标准共享对象(SO) 文件。 - **Application Namespace (App NS)**: 当应用进程初始化时会建立自己的命名空间。这个特定的应用程序命名空间主要用于查找并加载该应用私有的 SO 文件,这些文件通常存放在 APK 安装包内定义的位置或者是沙盒环境里。 这种设计使得每个应用程序都可以拥有独立于其他应用的安全上下文来进行本地代码调用,同时也允许开发者将自己的 C/C++ 集成到基于 JavaScript 编写的前端逻辑之中。 #### Native Module 加载流程 当遇到像 import 这样的模块导入指令时,JS 引擎会触发一系列操作最终完成原生模块(NativeModule) 的实例化: 1. 利用 dlopen 函数打开指定路径下的 .so 文件; 2. 将新加载NativeModule 添加至 NativeModuleManager 链表末端; 3. 执行必要的初始化函数以准备后续 API 调用; 上述过程中涉及到的具体细节可以在关于 requireNapi 方法的文章中有详细介绍[^4]。 #### 实际应用场景中的交互方式 为了使 JavaScript 可以方便地调用底层 C++ 提供的功能,ArkUI 设计了一套桥梁机制——即所谓的 “Binding”。这层绑定不仅简化了跨语言编程模型之间的复杂度,还提供了良好的性能表现。例如,在处理图形渲染、多媒体播放或者其他硬件加速的任务时,JavaScript 层面只需要简单几行代码就可以高效地控制背后复杂的计算资源。 ```javascript // 假设有一个名为 'mediaPlayer' 的 native module const player = mediaPlayer.create(); player.load('http://example.com/video.mp4'); player.play(); ``` 这段伪代码展示了如何轻松地从 JavaScript 访问预先编译好的 C++ 代码片段,从而实现了高效的媒体播放功能。

登录后您可以享受以下权益:

×
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回顶部
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1