一、示例:
使用第三方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所在目錄,創(chuàng)建"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文件,當前開發(fā)測試階段可以先放入所有的so;后續(xù)有裁減包大小的訴求時,根據你們使用的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環(huán)境的特殊)
二、其他補充說明
鴻蒙只能使用基于napi編譯的so,HarmonyOS的應用必須用js來橋接native。需要使用ace_napi倉中提供的napi接口來處理js交互。
- 使用鴻蒙提供的NDK直接開發(fā)so庫,可以直接使用
- 如果是其他環(huán)境下編譯的so庫需要封裝Napi調用SO庫
Node-API開發(fā)規(guī)范
Native API在應用工程中的使用指導文章來源:http://www.zghlxwxcb.cn/news/detail-805230.html
基于NDK編譯三方庫文章來源地址http://www.zghlxwxcb.cn/news/detail-805230.html
到了這里,關于鴻蒙使用第三方SO庫的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!