NAPI篇【2】——OpenHarmony含NAPI工程cpp详解

        NAPI篇【1】中,讲解如何创建一个支持NAPI的OpenHarmony工程,其中有一个步骤是在OpenHarmony工程添加Harmony的NAPI工程中的cpp文件夹。cpp文件夹包含支持NAPI所需要的c/c++源码、接口导出文件以及编译文件等。本文将进行详解其中各文件的作用,帮助熟悉NAPI的开发。

        本文基于笔者的开发经验和网上参考资料汇集而成,笔者也处于学习阶段,如有错误,欢迎指正。

一、cpp文件夹——基础文件

        1、cpp文件夹基本内容

        通过NAPI模板新建工程,cpp文件夹内容全展开,如下图所示。

        2、cpp的一级目录文件

         如下图所示,cpp的一级目录下有hello.cpp、CMakeLists.txt 和一个二级目录types。

        (1)CMakeLists.txt 文件

        CMakeLists.txt是cmake用来生成Makefile文件的一个描述编译链接的脚本文件。该文件的基本内容行注释如下所示:

#CMake的最低版本要求
#默认即可
cmake_minimum_required(VERSION 3.4.1)    
 
# 用函数project(demo)指定的项目名称,可自行设置,这里变量的值为“napi”
project(napi)           

#设置环境变量,设置库文件的输出地址。
#CMAKE_CURRENT_SOURCE_DIR:当前处理的CMakeLists.txt文件所在目录
#默认即可
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})


#给工程添加头文件,会为当前CMakeLists.txt的所有目标,
#以及之后添加的所有子目录的目标添加指定头文件搜索路径。
#默认即可
include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)

add_library(entry SHARED hello.cpp)   
#将源文件hello.cpp生成动态库文件,若有多个cpp文件,需要在此添加,以便生成动态库文件
# 生成目标库文件libentry.so,entry表示最终的库名称,SHARED表示生成的是动态链接库,
#////////////////////////////////////////////////////
#add_library(生成的库名称 STATIC/SHARED 源文件1.cpp 源文件2.cpp)
#将源文件生成 静态/动态 库文件 
#STSTIC 表示静态库最终会编入到可执行文件中
#SHARED(常见参数)表示动态库(又称共享库)方式
#////////////////////////////////////////////////////

target_link_libraries(entry PUBLIC libace_napi.z.so)
# 把libentry.so链接到libace_napi.z.so上
#/////////////////////////////////////////////
#target_link_libraries (库/可执行文件 library1 library2 ...)
#将目标文件(为库或者可执行文件)与库文件进行链接
#libace_napi.z.so库,默认即可
#/////////////////////////////////////////////

  &

### 配置 NAPI 支持 为了使 OpenHarmony 工程能够支持并调用自定义的 NAPI 函数,需按照特定流程设置工程环境。这不仅涉及基础项目的搭建,还包括必要的文件配置。 #### 创建新项目 通过 DevEco Studio 可以轻松创建一个新的 NAPI 工程。启动 IDE 后选择新建项目选项,在向导中指定目标设备为轻量级系统或标准系统,并勾选启用 NAPI 功能[^1]。 #### 修改 `config.json` 文件 对于已存在的项目,确保其根目录下的 `config.json` 中包了 `"napi": true` 的字段声明,以此表明该应用程序具备原生接口访问权限[^2]。 ```json { "appInfo": { ... }, "module": [ { "name": "entry", "type": "page", "srcEntrance": "./ets/index.ets", "abilities": [], "resources": {}, "js": ["./common/**/*.ts"], "napi": true, ... } ] } ``` #### 编写 C/C++ 代码 进入 `cpp` 子文件夹编写业务逻辑所需的本地模块实现。这里可以放置头文件(.h),源文件(.c 或 .cpp)以及构建脚本(build.gn)[^3]。 #### 更新依赖关系 为了让 TypeScript 更好地理解新增加的功能组件,应在 `entry/oh-package.json5` 内部添加对外暴露 API 接口描述文档(d.ts)作为外部库引用的一部分[^4]: ```json5 // oh-package.json5 { dependencies: { "@ohos/my-napi-module": "^0.0.1" } } ``` 完成上述步骤之后,即可顺利集成基于 Node-API 构建的服务端点至前端页面之中,从而充分利用底层硬件资源执行复杂运算任务的同时保持良好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值