HarmonyOS 鸿蒙Next:OpenHarmony中怎么在应用程序中调用第三方C/C++库(不使用Hap集成Napi方式,实现类似Linux系统直接动态链接到/usr/lib64/中的动态库)

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:OpenHarmony中怎么在应用程序中调用第三方C/C++库(不使用Hap集成Napi方式,实现类似Linux系统直接动态链接到/usr/lib64/中的动态库) 想要实现一个需求 在用arkts开发的程序中使用第三方的C/C++库(如openssl、curl等) 常规的方式是 将这些三方库添加到程序工程里面,再编写NAPI来调用,现在想要的效果是 能不能不把这些第三方库集成到程序的hap包中,也能够调用到这些库(像在linux中那样将这些第三方库安装到 /usr/lib64 /usr/include中动态链接这些库)

5 回复

不通过 N-API 的方式目前只有通过多进程走 IPC 通信实现,然而实际上 在主调方最终仍然需要通过 N-APi 实现。

更多关于HarmonyOS 鸿蒙Next:OpenHarmony中怎么在应用程序中调用第三方C/C++库(不使用Hap集成Napi方式,实现类似Linux系统直接动态链接到/usr/lib64/中的动态库)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


通过N-API的方式实现,是不是一定要将这些三方库集成到应用的HAP包中才可以呢?

本质上都必须集成。

系统本身自带的才能集成到系统目录下,剩下的都是跟随应用集成。

在OpenHarmony中,若想在应用程序中调用第三方C/C++库而不使用Hap集成Napi方式,并希望实现类似Linux系统直接动态链接到/usr/lib64/中的动态库,你可以考虑以下方法:

OpenHarmony虽然基于Linux内核,但其应用生态和权限管理有其特殊性,尤其是针对第三方库的加载。通常,OpenHarmony应用运行在AppGallery或特定的沙箱环境中,直接访问系统级别的/usr/lib64/可能受限。

一种可行的方法是,将第三方C/C++库打包进你的应用程序包中,并在应用启动时动态加载。这可以通过将库文件放置在应用的特定目录(如assetsraw资源目录,然后在运行时复制到数据目录),并使用dlopendlsym等POSIX标准的动态链接库函数来加载和调用。

具体步骤:

  1. 将第三方库文件(如.so文件)放入应用的资源目录。
  2. 在应用启动时,将库文件复制到应用的私有存储目录。
  3. 使用dlopen打开库文件,dlsym获取所需函数指针。
  4. 调用函数指针执行所需操作。

请注意,这种方法可能受到OpenHarmony版本、设备厂商定制以及应用权限策略的影响。如果应用无法直接访问或复制库文件,可能需要申请特定权限或调整应用沙箱策略。

如果问题依旧没法解决请联系官网客服,官网地址是:

回到顶部