NDK适用场景
适合使用NDK的场景:应用涉及如下场景时,适合采用NDK开发
-
性能敏感的场景,如游戏、物理模拟等计算密集型场景。
-
需要复用已有C或C++库的场景。
-
需要针对CPU特性进行专项定制库的场景,如Neon加速。
不建议使用NDK的场景:应用涉及如下场景时,不建议采用NDK开发
-
纯C或C++的应用。
-
希望在尽可能多的HarmonyOS设备上保持兼容的应用。
NDK必备
为顺利进行NDK开发,开发者需要先掌握必要的基本概念及基础知识。
NDK基本
-
Node-APINode-APINode-API
曾用名NAPI,是HarmonyOS中提供ArkTS/JS与C/C++跨语言调用的接口,是NDK接口中的一部分。该接口是在Node.js提供的Node-API基础上扩展而来,但与Node.js中的Node-API不完全兼容。
-
C API
HarmonyOS NDK的曾用名,不再使用。
前置知识
-
Linux C语言编程知识
内核、libc基础库基于POSIX等标准扩展而来,掌握基本的Linux C编程知识能够更好的帮助理解HarmonyOS NDK开发。
-
CMake使用知识
CMake是HarmonyOS默认支持的构建系统。请先通过CMake官方文档了解基础用法。
-
Node Addons开发知识
ArkTS采用Node-API作为跨语言调用接口,熟悉基本的Node Addons开发模式,可以更好理解NDK中Node-API的使用。
-
Clang/LLVM编译器使用知识
具备一定的Clang/LLVM编译器基础知识,能够帮助开发者编译出更优的Native动态库。
NDK目录
-
build目录:放置预定义的toolchain脚本文件ohos.toolchain.cmake
CMake编译时需要读取该文件中的默认值,比如编译器架构、C++库链接方式等,因此在编译时会通过CMAKE_TOOLCHAIN_FILE指出该文件的路径,便于CMake在编译时定位到该文件。
-
build-tools文件夹:放置NDK提供的编译工具
# 键入下一行命令查看CMake的版本 cmake -version # 结果 cmake version 3.16.5 CMake suite maintained and supported by Kitware (kitware.com/cmake).
-
llvm文件夹:放置NDK提供的编译器
NDK常用模块
下表介绍了NDK的常用模块。
模块 | 模块简介 |
---|---|
标准C库 | 以musl为基础提供的标准C库接口。 |
标准C++库 | C++运行时库libc++_shared。 |
日志 | 打印日志到系统的HiLog接口。 |
Node-API | 当需要实现ArkTS/JS和C/C++之间的交互时,可以使用Node-API。 |
libuv | 三方异步IO库。 |
zlib | zlib库,提供基本的数据压缩、解压接口。 |
Rawfile | 应用资源访问接口,可以读取应用中打包的各种资源。 |
XComponent | ArkUI XComponent组件提供surface与触屏事件等接口,方便开发者开发高性能图形应用。 |
Drawing | 系统提供的2D图形库,可以在surface进行绘制。 |
OpenGL | 系统提供的OpenGL 3D图形接口。 |
OpenSL ES | 用于2D、3D音频加速的接口库。 |
创建NDK工程
下面通过DevEco Studio的NDK工程模板,来演示如何创建一个NDK工程。
不同DevEco Studio版本的向导界面、模板默认参数等会有所不同,请根据实际工程需要,创建工程或修改工程参数。
-
通过如下两种方式,打开工程创建向导界面。
- 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择Create Project开始创建一个新NDK工程。
- 如果已经打开了工程,可以在菜单栏选择File > New > Create Project来创建一个新NDK工程。
-
根据工程创建向导,选择Native C++工程模板,然后单击Next。
-
在工程配置页面,根据向导配置工程的基本信息后,单击Finish。工具会自动生成示例代码和相关资源,等待工程创建完成。
在工程entry/src/main目录下会包含cpp目录
毕昇编译器
毕昇编译器是基于LLVM开源软件开发的一款用于C/C++等语言的native编译器,能将C/C++代码工程编译链接成可以在设备上运行的二进制。在无需改动用户代码的条件下,相比业界主流的开源LLVM或GCC编译器,毕昇编译器能提供更强大的优化能力,使编译链接出来的二进制的运行时长更短、指令数更少,帮助提升应用在设备上的运行流畅度。
能力范围
毕昇编译器提供将C/C++代码工程编译链接成可以在设备上运行的二进制的基本能力,主要包括以下三方面:
- 编译能力:将C/C++源码文件编译成汇编文件,汇编文件是指使用汇编语言编写的文件。
- 汇编能力:将汇编文件汇编成可重定向文件,可重定向文件是ELF格式的二进制文件,但不能直接放在设备上运行。
- 链接能力:将一个或多个可重定向文件一起链接成一个可执行的二进制文件。
亮点特征
毕昇编译器相对于LLVM/GCC编译器有以下特点。
- 循环优化增强
针对循环相关的编译优化,毕昇编译器在场景识别、结构变换等方面做了改进和增强。例如在社区LLVM已有的Loop Distribution优化上,毕昇编译器相比开源LLVM编译器,能额外识别出循环内不同代码块间数据依赖关系、以及不同代码块运行的迭代次数差别,从而能对更多的循环进行loop distribution优化。
Figure 1 毕昇编译器Loop Distribution优化增强示例
- 矢量化优化增强
毕昇编译器在矢量化优化方面,相比开源LLVM编译器,不仅能将更多的循环做矢量化转换,还在矢量化指令选择上更高效。例如下面示例中,开源LLVM编译器虽然做了矢量化,但使用了5条矢量指令;而毕昇编译器只需要使用2条矢量指令,最终产生的二进制效率更优。
Figure 2 毕昇编译器矢量化优化增强示例
毕昇编译器使用指导
在DevEco Studio 中使用毕昇编译器:
开发者可以获取DevEco Studio 5.0.3.402及以上的版本,在HarmonyOS应用的工程级build-profile.json5中简单配置即可使用毕昇编译器:在runtimeOS为HarmonyOS的时候,设置nativeCompiler为BiSheng,即可使用毕昇编译器构建HarmonyOS工程的C/C++代码。
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
点击领取→【纯血版鸿蒙全套最新学习资料】(安全链接,放心点击)
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
鸿蒙(HarmonyOS NEXT)最新学习路线
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
HarmonyOS Next 最新全套视频教程
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .……
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ……
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ……
大厂面试必问面试题
鸿蒙南向开发技术
鸿蒙APP开发必备
鸿蒙生态应用开发白皮书V2.0PDF
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。