当前位置: 首页 > news >正文

鸿蒙使用第三方SO库

一、示例:

使用第三方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":[
"arneabi-v7a",
"arn64-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所在目录;${0HOS_ARCH}表示构建的对应版本(arm64-v8a等) 
target_link_libraries(yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${0HOS_ARCH}/1ibMNN.so)
target_link_libraries (yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${0HOS_ARCH}/libopencv_core.so) 
target_link_libraries(yitusdk PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${0HOS_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环境的特殊)

二、其他补充说明

鸿蒙只能使用基于napi编译的so,HarmonyOS的应用必须用js来桥接native。需要使用ace_napi仓中提供的napi接口来处理js交互。

  1. 使用鸿蒙提供的NDK直接开发so库,可以直接使用
  2. 如果是其他环境下编译的so库需要封装Napi调用SO库

Node-API开发规范

Native API在应用工程中的使用指导

基于NDK编译三方库

http://www.lryc.cn/news/286246.html

相关文章:

  • 宝塔FTP文件传输服务结合cpolar内网穿透实现远程连接本地服务
  • 【ARMv8M Cortex-M33 系列 7.4 -- 如何使能 usagefault | memmange fault | bus fault 中断】
  • Android Studio安卓开发--ListView学习整理
  • hyperf 和 laravel、lumen防止xss攻击中间件封装
  • flask web 学习之用户认证与会话管理
  • 更改wpf原始默认按钮的样式
  • 【协议】HTTP、HTTPS和HTTP2.0学习总结
  • [数据结构]顺序表
  • 北斗卫星为野外科考人员提供安全保障
  • Linux的一些快捷键(hot keyboard)
  • Charles将证书安装到系统的方法(adb)
  • git 常用指令 (先收藏再说)
  • 2024问题汇总
  • 爬虫(学习笔记)
  • 让业务满意的性能测试报告模板应该是怎样的?
  • 高防IP如何保护服务器
  • C++提高编程——STL:string容器、vector容器
  • three.js从入门到精通系列教程004 - three.js透视相机(PerspectiveCamera)滚动浏览全景大图
  • Gradle 笔记
  • flume案例
  • 信用评价研究MATLAB仿真代码
  • 网络安全产品之认识防毒墙
  • android 防抖工具类,经纬度检查工具类
  • PgSQL - 17新特性 - 块级别增量备份
  • Vue3setup()的非语法糖和语法糖的用法
  • HTTP状态信息
  • CSS之边框样式
  • k8s-helm
  • 黑马程序员JavaWeb开发|Maven高级
  • 【经验分享】MAC系统安装R和Rstudio(保姆级教程)安装下载只需5min