HarmonyOS 鸿蒙Next应用开发如何调用第三方SO库
HarmonyOS 鸿蒙Next应用开发如何调用第三方SO库 萌新求助大佬~
需求:开发在pad上运行的鸿蒙应用,需要集成第三方的SO库。目前已知这个第三方库是闭源的,有适配Android和Linux ARM的SO。
问题:
- 是否无论api版本高低,第三方SO都要用鸿蒙SDK交叉编译生成,还是低版本api有其他方式可以用SO?
- 假如低版本的api(如api 6)可以调用第三方的Android版本SO库,那是通过js/ArkTS调用java,用java调SO库里的方法吗?这中间是用JNI来定义接口吗?
市面上的华为PAD现在大多是HarmonyOS 2.0, 其内部安装大多数应用都是Android, 只有少量的快应用是纯HarmonyOS的JS应用。
- 是否无论api版本高低,第三方SO都要用鸿蒙SDK交叉编译生成,还是低版本api有其他方式可以用SO?
a. 在HarmonyOS使用so, 需要使用HarmonyOS Native SDK重新生成
b. HarmonyOS SDK API 6 是支持SO调用的,但是,需要华为内部研发人员的协助
这篇文章的操作步骤是没有问题,是当时的官方介绍
https://ost.51cto.com/posts/8581
- 假如低版本的api(如api 6)可以调用第三方的Android版本SO库,那是通过js/ArkTS调用java,用java调SO库里的方法吗?这中间是用JNI来定义接口吗?
a. api 6 没有ArkTS定义
b. 如 “https://ost.51cto.com/posts/8581” 这篇文章所述
更多关于HarmonyOS 鸿蒙Next应用开发如何调用第三方SO库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS SDK API 6 是支持SO调用的,但是,需要华为内部研发人员的协助。
那高版本和低版本对于集成so库来说,就是从JNI改为NAPI的差异吗?
a. 协助是你在通过生成SO实现自己的业务功能时,可能会遇到问题。生成SO的流程以及调用SO的方法,完全按照上述文章操作即可
b. 高低版本引入SO,最大差异就是JNI变为NAPI。至于CMake, Clang/Clang++, Flags参数是否有变化,没有逐一对比过。
那第一步就是先把第三方的so用HarmonyOS Native SDK重新编译后得到新的so了,我在文章里没看到这个流程,请问这个流程有可以参考的资料吗?
我的第三方库so是闭源的,供应商只提供了:Android,Linux ARM这两种SDK。我看了文章里提到的example,没能理解这个工程,这个工程跟鸿蒙的native c++ 工程和我的第三方库的Demo工程差异很大。是否还有比的参考资料。
如果是闭源 要么要求提供对应鸿蒙的版本 要么就无法使用。如文中所说,所有的代码必须重新编译。对于上层ArkTS来说 只能通过NAPI暴露其接口能力。
在HarmonyOS鸿蒙Next应用开发中,调用第三方SO库可以通过使用Native API实现。首先,确保第三方SO库是为ARM架构编译的,并且与鸿蒙系统的ABI兼容。将SO库文件放置在项目的libs
目录下,并在build.gradle
中配置jniLibs
路径。接着,在Java或ArkTS代码中使用System.loadLibrary
加载SO库。然后,通过JNI(Java Native Interface)或NAPI(Native API)调用SO库中的函数。确保在调用过程中处理异常,以避免应用崩溃。最后,进行充分的测试,确保SO库在鸿蒙系统上的兼容性和稳定性。
在HarmonyOS(鸿蒙)Next应用开发中调用第三方SO库,首先将SO文件放置在src/main/resources/lib
目录下。然后在ohos.build
文件中配置nativeLibraryPath
,指定SO库路径。通过System.loadLibrary("库名")
加载库,并使用native
关键字声明本地方法。最后在Java或JS代码中调用这些方法即可实现功能。确保SO库与目标设备的CPU架构兼容。