HarmonyOS 鸿蒙Next开发中怎样使用第3方so库

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

HarmonyOS 鸿蒙Next开发中怎样使用第3方so库 在鸿蒙开发中怎样使用第3方so库

2 回复

使用第三方SO库以导入OpenCV和MNN的SO库为例

1、将MNN和Opencv的so文件(包括.407文件),放入模块下libs目录对应的版本(arm64-v8a和armeabi-v7a) entry/libs/arm64-v8a/xxx.so

2、配置模块目录下的build-profile.json5的buildOption字段,增加abiFilters字段:

{
  "buildOption": { 
    "externalNativeOptions": { 
      ...
      "abiFilters": [ 
        "armeabi-v7a", 
        "arm64-v8a" 
      ] 
    }, 
  },
}

3、在CMakeLists.txt所在目录,创建’thirdPart’目录,然后将MNN和opencv的头文件放入该目录(头文件在提供的压缩包的include目录里):

src/main/cpp/thirdPart/MNN/xxxx.hpp 
src/main/cpp/thirdPart/opencv/opencv4/opencv2/xxxx.hpp

4、修改CMakeLists.txt文件,增加以下内容:

//实际打包内容为lib中所有的so文件,当前开发测试阶段可以先放入所有的so; 后续有裁减包大小的诉求时, 根据你们使用的so库,我们会提供对应的方案 
// 链接需要的so库至当前的模块 可引入需要的模块 
// 'yitusdk' 表示 模块名称;${CMAKE_CURRENT_SOURCE_DIR}表示CMakeLists所在目录;${OHOS_ARCH}表示构建的对应版本(arm64-v8a等) 
target_link_libraries(yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libMNN.so) 
target_link_libraries(yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libopencv_core.so) 
target_link_libraries(yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libopencv_imgproc.so) 
//引入对应的头文件 实际打包头文件不会影响包大小 
target_include_directories(yitusdk PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart) 
//以下根据实际情况,某个库,如opencv,根据include时的错误信息,可以写多条 
target_include_directories(yitusdk PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/opencv/opencv4) 
target_include_directories(yitusdk PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/opencv)

补充说明: 放置so文件时,注意对应的407也需要一同放入(由于windows环境的特殊)

更多关于HarmonyOS 鸿蒙Next开发中怎样使用第3方so库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next开发中,使用第三方so(Shared Object)库通常涉及以下几个步骤:

  1. 准备so库:确保你拥有适用于鸿蒙系统的第三方so库文件。这些文件通常是从第三方库提供者那里获取的,并且已经针对鸿蒙系统进行了适配或编译。

  2. 放置so库:将so库文件放置在项目的libs目录下(如果没有该目录,可以手动创建)。根据目标架构(如arm64-v8a、armeabi-v7a等),将so库文件放入对应的子目录中。

  3. 配置build.gradle:在模块的build.gradle文件中,添加对so库的引用。这通常涉及到在android块的sourceSets部分指定so库的路径。不过,在鸿蒙系统中,配置方式可能有所不同,具体需参考鸿蒙的官方文档或示例项目。

  4. 加载so库:在代码中,使用System.loadLibrary("library_name")来加载so库。其中,"library_name"是so库文件名(不包含前缀lib和后缀.so)。

  5. 调用本地方法:一旦so库被加载,你就可以通过JNI(Java Native Interface,尽管在鸿蒙中可能使用不同的机制)调用so库中定义的本地方法了。

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

回到顶部