鸿蒙NDK开发:Native开发入门(一)

NDK(Native Development Kit)允许使用C或C++语言实现应用的关键功能。当遇到性能敏感场景或需要复用已有C/C++库时,NDK是必不可少的工具。

一、NDK

NDK(Native Development Kit)是HarmonyOS SDK提供的Native API、相应编译脚本和编译工具链的集合,方便开发者使用C或C++语言实现应用的关键功能。

NDK只覆盖了HarmonyOS一些基础的底层能力:

能力 说明
C运行时基础库 libc
图形库 Drawing、OpenGL
窗口系统 XComponent
多媒体 音视频处理
压缩库 zlib
跨语言调用 Node-API(ArkTS/JS ↔ C)

注意:NDK没有提供ArkTS/JS API的完整能力。

运行机制

  • 可以使用NDK中的Node-API接口,访问、创建、操作JS对象

  • 也允许JS对象使用Native动态库

二、NDK适用场景

2.1 适合使用NDK的场景

场景 说明
性能敏感场景 游戏、物理模拟等计算密集型场景
复用已有C/C++库 需要复用现有C/C++代码库
CPU特性专项定制 如Neon加速等针对特定CPU特性的优化

2.2 不建议使用NDK的场景

场景 说明
纯C/C++应用 纯C或C++的应用不适合NDK
兼容性要求高 希望在尽可能多的HarmonyOS设备上保持兼容的应用

三、香关基础

前置知识 说明
Linux C编程 内核、libc基础库基于POSIX等标准扩展,掌握Linux C编程有助于理解NDK开发
CMake使用 HarmonyOS默认支持的构建系统
Node Addons开发 Node-API是跨语言调用接口,熟悉Node Addons开发模式有助于理解
Clang/LLVM编译器 帮助编译出更优的Native动态库

说明:

Node-API (曾用名NAPI)是HarmonyOS中提供ArkTS/JS与C/C++跨语言调用的接口,该接口基于Node.js的Node-API扩展而来,但不完全兼容

四、NDK目录结构

4.1 build目录

放置预定义的toolchain脚本文件hmos.toolchain.cmake

CMake编译时需要读取该文件中的默认值(如编译器架构、C++库链接方式等),因此编译时会通过CMAKE_TOOLCHAIN_FILE指出该文件的路径。

4.2 build-tools文件夹

放置NDK提供的编译工具:

复制代码
# 查看CMake版本
cmake -version
# cmake version 3.16.5

4.3 llvm文件夹

放置NDK提供的编译器工具链。

五、NDK常用模块

模块 功能简介
标准C库 基于musl提供的标准C库接口
标准C++库 C++运行时库接口,提供C++运行时能力
日志 提供向系统输出HiLog日志接口
Node-API 支持ArkTS/JS和C/C++之间的交互接口
FFRT 基于任务的并发编程框架
libuv 第三方异步IO库
zlib 提供基础数据压缩与解压功能
Rawfile 提供访问应用内置资源的接口,用于读取应用中打包的各种资源
XComponent ArkUI XComponent组件,提供surface与触屏事件等接口,便于开发高性能图形应用
Drawing 系统提供的2D图形库,支持在surface进行绘制
OpenGL 系统提供的OpenGL 3D图形接口
OpenSL ES 支持2D、3D音频加速的接口

六、其他

要点 说明
NDK定位 使用C/C++实现应用关键功能,覆盖底层能力
适用场景 性能敏感、复用已有库、CPU特性定制
构建工具 CMake(默认支持)
跨语言调用 Node-API(基于Node.js扩展,但不完全兼容)