当前位置:首页>鸿蒙APP>鸿蒙与Rust(3)——NDK

鸿蒙与Rust(3)——NDK

  • 2026-09-05 19:05:18
鸿蒙与Rust(3)——NDK
NDK(Native Development Kit)是 HarmonyOS 中 提供的一组 Native 开发接口与工具集合,主要覆盖了 HarmonyOS 的一些基础底层能力,如C运行时基础库 libc、图形库、窗口系统、多媒体、压缩库等。通过 NDK,开发者可以编写高性能的应用模块,特别是在需要复用已有 C/C++、Rust库、针对 CPU 特性进行专项定制库的场景下,NDK 显得尤为重要。

NDK 相关概念

NDK:Native Develop Kit 的缩写,在 OHOS 上就是 Native API;Native API 是官方名字,NDK 指代相同意思。
Native API:OHOS SDK 里面 native 包提供的,面向三方应用开发的 Native 接口以及相应编译脚本,编译工具链。包括C运行时基础库 libc,3D图形库 opengl等,面向 JS 与 C 跨语言的接口 Node-API 等。
SDK CAPI:OHOS Native API 中的 C 语言接口,以及工具链部分,当前 OHOS 的 Native API 里面只包含 C 语言接口,因此N ative API 与 CAPI 意思一样,建议交流的时候使用 CAPI,防止 Native API 与 NAPI 缩写混用。
Node-API:曾用名 NAPI,是 OHOS 中提供 JS 与 C 跨语言调用的接口,是 Native API 接口中的一部分。 该接口在Node.js 提供的 Node-API 基础上扩展而来,但不完全与 Node.js 中的 Node-API 完全兼容。
NAPI:Node-API的曾用名,当前 Node-API 头文件中的接口仍然以 napi_开头,不建议使用。

什么是 NDK?

鸿蒙 NDK 是一套供开发者使用 C、C++ 或 Rust 等原生语言进行应用开发的工具集。它不仅提供了编译器(Clang/LLVM)和构建工具(CMake),还封装了一系列 Native 接口,覆盖了鸿蒙系统的基础底层能力。
其核心组成部分包括:
C 运行时基础库:如标准 C 库 libc、C++ 标准库 libc++。
系统基础接口:涵盖日志打印(HiLog)、事件处理、压缩库(zlib)等。
高性能多媒体/图形:提供 Vulkan、OpenGL ES 图形库、音频/视频处理接口。
窗口与底层交互:支持窗口系统、本地内存管理等能力。

为什么选择 NDK 开发?

虽然 ArkTS 是鸿蒙应用开发的主流语言,但在以下场景中,NDK 具有不可替代的优势:
极致的性能需求:在图像处理、物理模拟、音视频解码或复杂算法运算时,C++/Rust 能通过手动内存管理和硬件级优化(如 NEON/SIMD 指令集)提供更高的执行效率。
成熟生态复用:业界有大量优秀的开源库(如 OpenCV、FFmpeg、SQLite、Game Engines),通过 NDK 可以直接将其引入鸿蒙项目,避免重复造轮子。
多平台代码共享:如果应用同时运行在 Android、iOS 和鸿蒙上,核心业务逻辑可以用 C++ 编写,实现“一套代码,多端复用”。
Rust 语言支持:鸿蒙 NDK 积极拥抱 Rust,为开发者提供了更安全的内存管理机制,降低了原生代码崩溃的风险。

获取 NDK 开发包

通过下载 command line tools 获取 NDK 开发包。
先下载 command line tools 并解压完成,NDK开发相关工具位于$command line tools解压目录/sdk/default/openharmony/native路径下。
通过安装DevEco Studio获取NDK开发包。
先下载并安装完成 DevEco Studio,NDK 开发相关工具位于$DevEco Studio安装目录/sdk/default/openharmony/native路径下。

NDK常用模块

在HarmonyOS NDK 开发中,系统为开发者提供了一系列丰富的底层原生模块,涵盖了从基础运行库到高级图形渲染的各种能力。
鸿蒙NDK的模块通常以 .so 动态链接库的形式提供,C++ 开发者可以在 CMakeLists.txt 中引入。常用的核心模块包括:

基础通信与运行库模块

Node-API (NAPI)(libace_napi.z.so):最核心的模块之一。用于实现 ArkTS(或 JS)与 C/C++ 之间的跨语言交互、数据类型转换、生命周期管理等。
标准 C/C++ 库:包括 libc、libc++、libm(数学库),提供基础的内存管理、线程、标准数据结构等能力。

系统通用服务模块

日志模块 HiLog(libhilog_ndk.z.so):用于在 Native 层打印日志,方便开发者在 DevEco Studio 的 HiLog 窗口进行调试。
资源管理 Rawfile(librawfile.z.so):用于在 Native 层直接读取应用包内的 resources/rawfile 目录下的资产文件(如读取本地的模型文件、音频文件)。
压缩模块(libz.so):提供 zlib 基础数据压缩与解压能力。

图形与渲染模块 (Graphic)

Native Drawing(libnative_drawing.so):提供底层 2D 图形绘制能力(类似于 Skia),常用于自定义复杂的 UI 渲染或图表。
NativeWindow(libnative_window.so):NativeWindow是本地平台化窗口,表示图形队列的生产者端。开发者可以通过NativeWindow接口进行申请和提交Buffer,配置Buffer属性信息。
XComponent(libace_ndk.z.so):ArkUI XComponent组件,提供surface与触屏事件等接口,便于开发高性能图形应用。
VSync 模块(libnative_vsync.so):用于获取系统屏幕刷新帧率信号,保持原生渲染与屏幕刷新同步,避免画面撕裂。
OpenGL:OpenGL是一种跨平台的图形API,用于为3D图形处理硬件指定标准的软件接口。HarmonyOS现已支持OpenGL 4.2。
OpenGL ES:OpenGL ES 是 OpenGL 规范的一种形式,适用于嵌入式设备。HarmonyOS 现已支持 OpenGL ES 3.2。
Vulkan:Vulkan是一套2D和3D绘图应用程序接口,具有跨平台、高性能的特点。HarmonyOS SDK 现已支持Vulkan v1.4.309版本接口,具体可用版本取决于GPU驱动实现。

多媒体与图像模块 (Media)

原生音频 OHAudio(libohaudio.so):提供低延迟的音频录制与播放能力,适用于实时语音、音乐软件。
原生图像处理 Image(libimage_ndk.z.so / libpixelmap_ndk.z.so):用于在底层解码图片、操作像素数据(PixelMap)。
音视频编解码(libnative_media_codecbase.so 等):提供硬件加速的音视频编码和解码接口。

其他

FFRT:基于任务的并发编程框架。
libuv:libuv是一个跨平台库,基于事件驱动来实现异步I/O,适用于网络编程和文件系统操作。它是Node.js的核心库之一,也被其他语言的开发者广泛使用

结论

HarmonyOS NDK 为开发者提供了进入系统底层能力的通道,它不仅仅是一套 API 和工具,更是一种高性能开发思路。对于需要复用 C/C++、Rust 资产、需要图形/多媒体/算法优化、需要贴近硬件能力的项目而言,NDK 是构建鸿蒙原生能力的重要抓手。NDK 不仅仅是一个工具包,它是开发者触达硬件极限、发挥系统潜能的钥匙。通过 NDK,我们可以将高性能的游戏引擎、复杂的端侧 AI 模型以及成熟的跨平台框架带入鸿蒙生态。
随着鸿蒙系统的不断演进(如 API 12 及更高版本),NDK 开放的能力将越来越丰富。作为开发者,掌握 NDK 开发不仅能提升个人技术竞争力,更能为用户打造出更流畅、更强大的“纯血”鸿蒙应用。

参考资料

  • HarmonyOS指南>NDK开发>NDK开发导读 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ndk-development-overview
  • 鸿蒙HarmonyOS应用开发之NDK开发导读 https://zhuanlan.zhihu.com/p/689337863
  • 鸿蒙next开发-OpenHarmony的NDK开发 https://zhuanlan.zhihu.com/p/678765810
  • 鸿蒙NDK开发入门 https://juejin.cn/post/7405427128806047807

最新文章

随机文章