HarmonyOS 鸿蒙Next c sdk(c接口比较多)封装成js接口较麻烦,通过swig转换仅能转成node-addon-api但鸿蒙不支持,期望鸿蒙Next支持或提供快速转换方案

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

HarmonyOS 鸿蒙Next c sdk(c接口比较多)封装成js接口较麻烦,通过swig转换仅能转成node-addon-api但鸿蒙不支持,期望鸿蒙Next支持或提供快速转换方案 c sdk(c接口数量多)封装成 js接口比较麻烦,通过swig转换只能转成node-addon-api,但鸿蒙不支持,期望鸿蒙支持,或提供快速转换方案

5 回复

更多关于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)

HarmonyOS的分布式文件系统让我在多设备间共享文件变得更加方便。

node-addon-api是封装napi的,开发者可以自己移植node-addon-api(据运行时同学说只需要引用三个头文件就可以了),然后再使用转换工具djinni或swig批量转换

针对HarmonyOS鸿蒙Next c sdk封装成js接口较麻烦的问题,以下提供直接相关的解答:

HarmonyOS目前在设计上确实更侧重于原生开发,对于C接口到JavaScript接口的转换,官方可能尚未提供直接的转换工具或库来简化这一过程。你提到的SWIG转换工具能够生成Node.js的addon,但由于鸿蒙系统对Node-addon-api的支持不足,导致这种转换方式在当前版本下不适用。

为了解决这一问题,你可以考虑以下方案:

  1. 手动封装:虽然工作量较大,但手动将C接口封装成鸿蒙系统可识别的JavaScript接口是一种可行的方案。这需要深入理解鸿蒙的JS框架和C接口的调用方式。

  2. 使用FFI(Foreign Function Interface):如果鸿蒙系统支持FFI,你可以通过FFI直接在JavaScript中调用C函数,但这需要鸿蒙系统提供相应的支持。

  3. 等待官方支持:随着鸿蒙系统的不断发展和完善,官方可能会在未来版本中提供对C接口到JavaScript接口转换的更好支持。

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

回到顶部