HarmonyOS 鸿蒙Next下cpp的so库怎么支持从网络加载并且使用呢?

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

HarmonyOS 鸿蒙Next下cpp的so库怎么支持从网络加载并且使用呢? cpp的so库怎么支持从网络加载并且使用呢?

11 回复

更多关于HarmonyOS 鸿蒙Next下cpp的so库怎么支持从网络加载并且使用呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个看过了,没找到自己想要的,

有解决办法吗,我下载的so存到了 /data/storage/el2/base/files/test/test.so 目录下,dlopen 时失败:

[invalidDomain]dlopen_impl load library header failed for /data/storage/el2/base/files/test/test.so

dlopen error: Error loading shared library /data/storage/el2/base/files/test/test.so: No error information—

然后想着写入到 /data/storage/el1/bundle/libs/arm64/test.so ,又没有权限。

后面我没有试,暂时先搁浅了,对我优先级不高。

不过从文档上,暂时就是这一种方法支持加载网络so。就是自己建立一个本地的so, 在将网络so下载下来,在通过本地的so里面的代码实现通过dlopen加载打开使用网络下载的so。

如果要是失败了,最好问下鸿蒙客服,没准存在bug,让他们看下,反正当时他们说的也是这样的一种下载使用方式。

我现在就是不晓得网络下载的so库,存到哪个目录下呢。卡死了,

问问鸿蒙客服,我的 so 的需求延期了,我还没有到你这步。之前只是去了解了怎么实现。

现在 so 不仅仅是客户端集成方式需要改,而且鸿蒙有自己的类似 JNI 那样的 apiso 也得重写,动起来太麻烦了。

没准鸿蒙客服会给你一个 demo,或者是告诉你暂时不支持;,

华为好像不支持除了libs 之外的路径 加载

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

支持往libs目录里面写吗?

使用第三方库

在HarmonyOS(鸿蒙)系统中,若要使C++的.so库支持从网络加载并使用,这通常涉及到动态加载库的技术。以下是一个简要说明:

HarmonyOS支持使用dlopendlsym等POSIX标准的动态加载函数。然而,直接从网络加载.so库并不常见,且可能涉及安全问题。一般做法是先将库文件下载到本地临时目录,再进行加载。

步骤概述:

  1. 下载库文件:使用网络请求(如HTTP或HTTPS)将.so库文件下载到设备的某个临时目录。

  2. 加载库文件:使用dlopen函数加载下载好的.so库文件。例如:

    void* handle = dlopen("/path/to/downloaded/library.so", RTLD_LAZY);
    if (!handle) {
        // 处理加载失败的情况
    }
    
  3. 获取函数指针:使用dlsym函数获取库中函数的地址,并调用这些函数。

  4. 关闭库:使用完库后,使用dlclose函数关闭库。

注意事项:

  • 确保下载的文件是可信的,避免安全漏洞。
  • 处理好错误情况,如网络请求失败、文件下载不完整、库加载失败等。
  • 考虑库的依赖关系,确保所有依赖库都已正确加载。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部