HarmonyOS 鸿蒙Next dlopen加载的so是必须要放到项目下的libs目录下吗?
HarmonyOS 鸿蒙Next dlopen加载的so是必须要放到项目下的libs目录下吗?
我在native中通过dlopen的方式去加载其他so,该so是放在沙箱目录下:
/data/storage/el2/base/haps/entry/files我在API 9 的环境下运行都可以加载,但是升级到API 11后就报错,提示没有这个文件(实际上这个文件是存在的),是不是API 11后,鸿蒙对so的路径做了什么限制?
3 回复
开发者您好,该问题已反馈研发人员进一步分析,请耐心等待!
用let sandboxPath = getContext().bundleCodeDir;获取沙箱路径之后,拼接字符串传入dlopen中
在HarmonyOS鸿蒙Next中,使用dlopen加载的.so文件(共享对象库)并不严格要求必须放置在项目下的libs目录下。dlopen函数能够加载指定路径下的.so文件,这意味着你可以将.so文件放置在应用的任意可访问目录下,甚至是在外部存储或网络位置(如果系统配置和安全策略允许)。
然而,为了应用的组织性和安全性,通常建议将.so文件放置在项目的libs目录下,并在编译时通过构建系统(如CMake或Gradle)正确配置,以确保.so文件能够被正确打包到应用包中,并在运行时能够被应用访问。
在实际应用中,你可能需要根据应用的具体需求、系统安全策略以及运行环境来选择合适的.so文件放置位置。如果遇到加载失败的问题,可以检查以下几点:
- 确保.so文件的路径正确无误。
- 检查应用的权限设置,确保有权限访问.so文件所在目录。
- 确认系统是否支持加载该.so文件(如架构兼容性等)。
如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html ,他们将能提供更专业的帮助和支持。