• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NDK开发导读
2<!--Kit: NDK-->
3<!--Subsystem: arkcompiler-->
4<!--Owner: @liyiming13-->
5<!--Designer: @huang_huijin-->
6<!--Tester: @zsw_zhushiwei-->
7<!--Adviser: @fang-jinxu-->
8
9NDK(Native Development Kit)是OpenHarmony SDK提供的Native API、相应编译脚本和编译工具链的集合,方便开发者使用C或C++语言实现应用的关键功能。NDK只覆盖了OpenHarmony一些基础的底层能力,如C运行时基础库libc、图形库、窗口系统、多媒体、压缩库、面向ArkTS/JS与C跨语言的Node-API等,没有提供ArkTS/JS API的完整能力。
10
11
12运行态,开发者可以使用NDK中的Node-API接口,访问、创建、操作JS对象;也允许JS对象使用Native动态库。
13
14
15## NDK适用场景
16
17**适合使用NDK的场景:应用涉及如下场景时,适合采用NDK开发**
18
19- 性能敏感的场景,如游戏、物理模拟等计算密集型场景。
20
21- 需要复用已有C或C++库的场景。
22
23- 需要针对CPU特性进行专项定制库的场景,如Neon加速。
24
25**不建议使用NDK的场景:应用涉及如下场景时,不建议采用NDK开发**
26
27- 纯C或C++的应用。
28
29- 希望在尽可能多的OpenHarmony设备上保持兼容的应用。
30
31
32## NDK必备基础知识
33
34为顺利进行NDK开发,开发者需要先掌握必要的基本概念及基础知识。
35
36
37### 前置知识
38
39- **Linux C语言编程知识**
40  内核、libc基础库基于POSIX等标准扩展而来,掌握基本的Linux C编程知识能够更好的帮助理解OpenHarmony NDK开发。
41
42- **CMake使用知识**
43  CMake是OpenHarmony默认支持的构建系统。请先通过[CMake官方文档](https://cmake.org/cmake/help/v3.16/guide/tutorial/)了解基础用法。
44
45- **Node Addons开发知识**
46  ArkTS采用Node-API作为跨语言调用接口,熟悉基本的[Node Addons开发模式](https://nodejs.org/api/addons.html),可以更好理解NDK中Node-API的使用。
47
48- **Clang/LLVM编译器使用知识**
49  具备一定的Clang/LLVM编译器基础知识,能够帮助开发者编译出更优的Native动态库。
50
51- **[Node-API](napi-introduction.md)**
52  曾用名NAPI,是OpenHarmony中提供ArkTS/JS与C/C++跨语言调用的接口,该接口基于Node.js的Node-API扩展而来,但不完全兼容。
53
54### NDK目录简介
55
56- build目录:放置预定义的toolchain脚本文件ohos.toolchain.cmake
57
58  ![zh-cn_image_0000001770128125](figures/zh-cn_image_0000001770128125.png)
59
60  CMake编译时需要读取该文件中的默认值,比如编译器架构、C++库链接方式等,因此在编译时会通过CMAKE_TOOLCHAIN_FILE指出该文件的路径,便于CMake在编译时定位到该文件。
61
62- build-tools文件夹:放置NDK提供的编译工具
63  ```
64  # 键入下一行命令查看CMake的版本
65  cmake -version
66  # 结果
67  cmake version 3.16.5
68  CMake suite maintained and supported by Kitware (kitware.com/cmake).
69  ```
70
71- llvm文件夹:放置NDK提供的编译器
72
73  ![zh-cn_image_0000001696408864](figures/zh-cn_image_0000001696408864.png)
74
75
76## NDK常用模块
77
78下表介绍了NDK的常用模块及其功能简介。
79
80
81| 模块 | 模块简介 |
82| -------- | -------- |
83| 标准C库 | 基于musl提供的标准C库接口。 |
84| 标准C++库 | C++运行时库接口,提供C++运行时能力。 |
85| 日志 | 提供向系统输出HiLog日志接口。 |
86| Node-API | 支持ArkTS/JS和C/C++之间的交互接口。 |
87| FFRT | 基于任务的并发编程框架。 |
88| libuv | 第三方异步IO库。 |
89| zlib | 提供基础数据压缩与解压功能的zlib库。 |
90| Rawfile | 提供访问应用内置资源的接口,可用于读取应用中打包的各种资源。 |
91| XComponent | ArkUI XComponent组件,提供surface与触屏事件等接口,便于开发高性能图形应用。 |
92| Drawing | 系统提供的2D图形库,支持在surface进行绘制。 |
93| OpenGL | 系统提供的OpenGL 3D图形接口。 |
94| OpenSL ES | 支持2D、3D音频加速的接口。 |
95