#星计划# 浅谈OpenHarmony的NDK开发 原创
左翼风发
发布于 2024-1-8 17:37
浏览
0收藏
背景
Native API(NDK)入门
Native API是OpenHarmony SDK上提供的一组native开发接口与工具集合(也称为NDK),方便开发者使用C或者C++语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力,如libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于JS API上的完整的OHOS 平台能力。在应用中使用Native API会编译成动态库打包到应用中。
名词概念
名词 | 名词解释 |
---|---|
Native API | OHOS SDK里面native包提供的,面向三方应用开发的Native 接口以及相应编译脚本,编译工具链。包括C运行时基础库libc,3D图形库opengl,面向JS与C跨语言的接口Node-API等,具体内容详见下表。 |
NDK | Native Develop Kit的缩写,在OHOS上就是Native API;Native API是官方名字,NDK指代相同意思。 |
SDK CAPI | OHOS Native API中的C语言接口,以及工具链部分,当前OHOS的Native API里面只包含C语言接口,因此Native 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_开头,不建议使用。 |
Native API构成介绍
Native API目录结构
Native API在SDK包的位置为$(SDK_ROOT)/native目录,主要有以下几个部分组成
目录 | 功能说明 |
---|---|
build | 应用中编译动态库的toolchain cmake脚本;这个目录下ohos.toolchain.cmake文件定义了给OHOS交叉编译选项 |
build-tools | 放置编译构建的工具,如cmake |
docs | Native API接口参考文档,通过doxgen从头文件中提取出来 |
llvm | 支持OHOS ABI的llvm交叉编译器 |
sysroot | 放置编译链接的依赖文件目录,包含头文件,动态库等 |
Native API接口(4.0 Release)
接口分类 | 接口功能 | 引入版本 |
---|---|---|
标准C库 | 以musl为基础提供的标准c库接口,当前提供了1500+的接口 | 8 |
标准C++库 | c运行时库libc_shared,此库在打包的时候需要打包或者静态链接到应用中 | 8 |
日志 | 打印日志到系统的hilog接口 | 8 |
Node-API | ArkUI提供的,方便应用开发接入JS应用环境的一组类Node-API(也叫napi),是属于Native API的一部分 | 8 |
XComponent | ArkUI XComponent组件中的surface与触屏事件接口,方便开发者开发高性能图形应用 | 8 |
libuv | ArkUI集成的三方的异步IO库 | 8 |
libz | zlib库,提供基本的压缩,解压接口 | 8 |
Drawing | 系统提供的2D图形库,可以在surface进行绘制 | 8 |
OpenGL | 系统提供的openglv3接口 | 8 |
Rawfile | 应用资源访问接口,可以读取应用中打包的各种资源 | 8 |
OpenSLES | 用于2D,3D音频加速的接口库 | 8 |
Mindspore | AI模型接口库 | 9 |
包管理 | 包服务接口,方便查询应用包信息 | 8 |
Native API相关资料
- Native API参考,介绍各个API参考手册
- Native API中支持的标准库,介绍Native API支持的开源标准库
- Native API开发指南,结合具体的例子,场景介绍各类接口的使用
- 如何在Cmake工程中使用NDK,介绍如何使用使用NDK开发一个CMake工程
- Node-API在应用工程中的使用指导, 如何使用Node-API接口
简单应用
如何开发应用?
- DevEco IDE创建工程选择“Native C++”模板:
编译运行后,点击helloworld打印输出有:Test NAPI 2 + 3 = 5
-
ArkUI部分:
-
nativeC部分由 CMake 和 C代码两部分组成:
-
CMake:
-
C++:
-
如何使用系统NDK?
上面例子运行起来后,c++部分是没有打印信息的,若想看到对应的打印信息,则需要调用hilog进行输出,修改如下:
-
cmake修改:
-
c++文件修改:
-
输出:
具体原理是什么?
1、PC端OHOS SDK里包括了native对应的库文件和头文件;
2、OHOS源码可以编译出带NDK的FullSDK,也可以从CI网址下载;
ohos的ci网址如下:每日构建 | OpenHarmony CI
使用建议
建议使用Native API的场景
主要有如下一些
- 应用性能敏感代码,比如游戏,物理模拟等计算密集型场景
- 需要复用已有的C或C++库
- 需要针对CPU特性进行专项定制的库,如neon加速
不建议使用Native API的场景
- 写一个纯native的的OHOS应用
- 希望在尽可能多的OHOS设备上保持兼容的应用
维测能力
总结
- NDK方式是应用层直接调用底层库或者三方库目前看最常规的方式;
- 4.0(API10)有ndk 46个,3.2(API9)有ndk 28个,实质代码里有更多的ndk,RK的原因没有编出更多,比如sensor部分就没有编译出来;
- 划重点,NDK里有两种api:node-api,用于arkts和c调用和传递数据;c/c api,可以把动态库打包成应用侧c++直接调用的接口;
- 社区文档:https://gitee.com/openharmony/docs/tree/master/zh-cn/application-dev/reference。
PS:附件是这个用例里的代码和3.2,4.0里扫出的ndk,有需要自取。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
MyNDKApplication.zip 487.6K 47次下载
4.0ndklibgn.md 8.45K 19次下载
3.2Releasendklibgn.md 6.02K 11次下载
赞
1
收藏
回复
1
3
相关推荐
跟着学习下helloworld
如何调用系统暴露的对应方法呢,麻烦指导下,万分感谢
上面有啊,你找hilog,就能看到了,就和c++开发一样