鸿蒙HarmonyOS实战:创建NDK工程、毕昇编译器

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

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提供的编译工具
    1. # 键入下一行命令查看CMake的版本
    2. cmake -version
    3. # 结果
    4. cmake version 3.16.5
    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库。zlibzlib库,提供基本的数据压缩、解压接口。Rawfile应用资源访问接口,可以读取应用中打包的各种资源。XComponentArkUI 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)最新学习路线

该路线图包罗根本技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不但增补了华为官网未涉及的解决方案
路线图适合人群:
IT开发人员:想要拓展职业边界
零根本小白:鸿蒙爱好者,渴望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速把握鸿蒙技术
2.视频学习资料+学习PDF文档
这份鸿蒙(HarmonyOS NEXT)资料包罗了鸿蒙开发必把握的核心知识要点,内容包罗了(ArkTS、ArkUI开发组件、Stage模型、多端摆设、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
HarmonyOS Next 最新全套视频教程

  纯血版鸿蒙全套学习资料(面试、文档、全套视频等)              
​​
总结
到场鸿蒙开发,你要先认清适合你的方向,假如是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简朴来说就是:为了确保高效学习,发起规划清晰的学习路线




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表