鸿蒙HarmonyOS 引入第三方so库详细流程,查缺补漏
官方arkts 引入第三方so库 缺胳膊少腿的,经过实践完成了so库的导入
1,当然要有一个so ,新建一个c++工程,不要修改,直接编译或者运行
在build下的outputs中拿到hap包,其中有so
2.解压hap, 拿到libs文件夹,检查一下里面有没有so
然后放到你的项目entry下
下面的libentry.so是运行后出现的
3.将CPP复制到main目录下面
你没看错CMakeLists.txt也要当然里面要修改,目的是找到so库怎么修改等后面讲,咱先不放CMakeLists.txt
4.在build-profile.json5 中添加如下这个是项目的,不是模块的,模块的加也没问题
在app下
在products下
在buildOption下
"app":{
"products":[
"buildOption":{
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"abiFilters": [
"arm64-v8a",
"x86_64"
]
},
...
5.模块下的
添加引用so的依赖
"libentry.so": "file:./src/main/cpp/types/libentry"
6.好了可以使用了
import testNapi from 'libentry.so';
...
build() {
RelativeContainer() {
Text(this.message)
.onClick(() => {
let str:string = JSON.stringify(testNapi.add(1,1))
console.log('11111:'+str)
})
7.咦 发现报错了,,说什么cmake …
The path of the cmake script in externaNative0ptions is empty. use the default path ./src/main/cpp/cMakelists.txt
The configqured cmake script in externalNativeptions/path does not exist.
If there are no issues in this file, perhaps you have used 'overrides’ in ‘hvigorfile.ts’, please check it.
没错,就是CMakeLists缺少
咱先复制进来
里面的东西呢
按照我下面的来
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(Libentry)
#设C++标准
Set(CMAKE_CXX_STANDARD 17)
#set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
# 1.定义SO库的根目录(指向entry/libs)
Set(SO_LIB_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs)
#2. 根据目录架构自动选择对应的目录
if(${OHOS_ARCH} STREQUAL "armeabi-v7a")
set(SO_ARCH_DIR "armeabi-v7a")
elseif(${OHOS_ARCH} STREQUAL "arm64-v8a")
set(SO_ARCH_DIR "arm64-v8a")
eLseif(${OHOS_ARCH} STREQUAL "x86_64")
set(SO_ARCH_DIR "x86_64")
else()
message(FATAL_ERROR "Unsupported architecture: ${OHOS_ARCH}")
endif()
#3、拼接当前架构的SO库目录
Set(SO_LIB_DIR ${SO_LIB_ROOT}/${SO_ARCH_DIR})
# 4.声明外部预编译库(关键修复)
add_library(libentry SHARED IMPORTED)
# 指定外部库的实际路径
set_target_properties(libentry PROPERTIES
IMPORTED_LOCATION "${SO_LIB_DIR}/${OHOS_ARCH}/libentry.so"
)
#5.添加SO库搜索路径
link_directories(${SO_LIB_DIR})
#6.引入头文件目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
对应的so库的名字自行修改
好了,大家有什么疑问,可以一起讨论,我的三方库引用到这了
更多推荐

所有评论(0)