HarmonyOS 鸿蒙Next c sdk(c接口比较多)封装成js接口较麻烦,通过swig转换仅能转成node-addon-api但鸿蒙不支持,期望鸿蒙Next支持或提供快速转换方案
HarmonyOS 鸿蒙Next c sdk(c接口比较多)封装成js接口较麻烦,通过swig转换仅能转成node-addon-api但鸿蒙不支持,期望鸿蒙Next支持或提供快速转换方案 c sdk(c接口数量多)封装成 js接口比较麻烦,通过swig转换只能转成node-addon-api,但鸿蒙不支持,期望鸿蒙支持,或提供快速转换方案
https://github.com/richerfu/node-addon-api-ohos
node-addon-api 适配版本
更多关于HarmonyOS 鸿蒙Next c sdk(c接口比较多)封装成js接口较麻烦,通过swig转换仅能转成node-addon-api但鸿蒙不支持,期望鸿蒙Next支持或提供快速转换方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
使用第三方SO库以导入MNN的SO库为例
1、将MNN的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的头文件放入该目录(头文件在提供的压缩包的include目录里):
src/main/cpp/thirdPart/MNN/xxxx.hpp
4、修改CMakeLists.txt文件,增加以下内容:
// 链接需要的so库至当前的模块 可引入需要的模块
// ‘entry’ 表示 模块名称;{CMAKE_CURRENT_SOURCE_DIR}表示CMakeLists所在目录;{OHOS_ARCH}表示构建的对应版本(arm64-v8a等)
target_link_libraries(entry PUBLIC {CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libMNN.so)
//引入对应的头文件 实际打包头文件不会影响包大小
target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart)
node-addon-api是封装napi的,开发者可以自己移植node-addon-api(据运行时同学说只需要引用三个头文件就可以了),然后再使用转换工具djinni或swig批量转换
针对HarmonyOS鸿蒙Next c sdk封装成js接口较麻烦的问题,以下提供直接相关的解答:
HarmonyOS目前在设计上确实更侧重于原生开发,对于C接口到JavaScript接口的转换,官方可能尚未提供直接的转换工具或库来简化这一过程。你提到的SWIG转换工具能够生成Node.js的addon,但由于鸿蒙系统对Node-addon-api的支持不足,导致这种转换方式在当前版本下不适用。
为了解决这一问题,你可以考虑以下方案:
-
手动封装:虽然工作量较大,但手动将C接口封装成鸿蒙系统可识别的JavaScript接口是一种可行的方案。这需要深入理解鸿蒙的JS框架和C接口的调用方式。
-
使用FFI(Foreign Function Interface):如果鸿蒙系统支持FFI,你可以通过FFI直接在JavaScript中调用C函数,但这需要鸿蒙系统提供相应的支持。
-
等待官方支持:随着鸿蒙系统的不断发展和完善,官方可能会在未来版本中提供对C接口到JavaScript接口转换的更好支持。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html