目录

NAPI调用失败常见问题处理

问题现象

通过NAPI调用C函数失败并报错。例如:发生Cpp Crash或者后台崩溃。

Native侧调用ArkTS侧函数报错napi_function_expected。

背景知识

HarmonyOS Node-API是基于Node.js 12.x LTS的Node-API规范扩展开发的机制,为开发者提供了ArkTS/JS与C/C++模块之间的交互能力。它提供了一组稳定的、跨平台的API,可以在不同的操作系统上使用。

场景一:跨线程使用错误

[h2]问题定位

[h2]分析结论

[h2]修改建议

场景二:函数调用错误

[h2]问题定位

[h2]分析结论

[h2]修改建议

场景三:文件引用错误

[h2]问题定位

检查开发环境配置以及头文件和库文件的引入。

[h2]分析结论

  1. 项目中缺少相关依赖库。
  2. CMakeLists.txt脚本中遗漏了编译所需的源代码、头文件以及三方库等。

[h2]修改建议

  1. 检查开发环境是否配置完善,包括安装了必要的依赖库(如libuv)。
  2. 确保CMakeLists.txt脚本中添加了编译所需的源代码、头文件以及三方库等。CMakeLists.txt脚本示例如下:
    # the minimum version of CMake.
    cmake_minimum_required(VERSION 3.5.0)
    project(S_20250329170715728896)
    
    
    # 定义一个变量,并赋值为当前模块cpp目录
    set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
    
    
    # 添加头文件.h目录,包括cpp,cpp/include,告诉cmake去这里找到代码引入的头文件
    include_directories(${NATIVERENDER_ROOT_PATH}
                        ${NATIVERENDER_ROOT_PATH}/include)
    
    
    # 声明一个产物libentry.so,SHARED表示产物为动态库,hello.cpp为产物的源代码
    add_library(entry SHARED napi_init.cpp)
    
    
    # 声明产物entry链接时需要的三方库libace_napi.z.so
    # 这里直接写三方库的名称是因为它是在ndk中,已在链接寻址路径中,无需额外声明
    target_link_libraries(entry PUBLIC libace_napi.z.so)