【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)

这篇具有很好参考价值的文章主要介绍了【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

  • 💌 所属专栏:【鸿蒙系统】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【鸿蒙系统】专栏的第1篇文章;
  今天也要开始学习鸿蒙系统了💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。在学习鸿蒙系统过程中,让我最头疼的就是编译速度好慢,从 git 上拉下来的源码编译过程都是全量编译,这让我倍感焦灼,于是就带着问题深入了解一下鸿蒙系统编译过程,看鸿蒙系统是否支持差分编译或者目标编译;

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

  专栏地址:【鸿蒙系统】 , 此专栏是我是夜阑的狗对鸿蒙系统编译过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


一、编译构建

  OpenHarmony编译子系统是以 GNNinja 构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:

  • 以部件为最小粒度拼装产品和独立编译。
  • 支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
  • 支持芯片解决方案厂商的灵活定制和独立编译。

 1.基本概念

  在了解编译构建子系统的能力前,应了解如下基本概念:

  • 平台:开发板和内核的组合,不同平台支持的子系统和部件不同。
  • 产品:产品是包含一系列部件的集合,编译后产品的镜像包可以运行在不同的开发板上。
  • 子系统:OpenHarmony 整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层(详见OpenHarmony技术架构)。

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

系统功能按照“系统 > 子系统 > 部件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。子系统是一个逻辑概念,它具体由对应的部件构成。

  • 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。需要注意的是下文中的芯片解决方案本质是一种特殊的部件。
  • 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。
  • 特性:特性是部件用于体现不同产品之间的差异。
  • GN:Generate Ninja 的缩写,用于产生 Ninja 文件。
  • Ninja:Ninja是一个专注于速度的小型构建系统。
  • hb:OpenHarmony 的命令行工具,用来执行编译命令。

  基于以上概念,编译子系统通过配置来实现编译和打包,该子系统主要包括:模块、部件、子系统、产品。

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为
  该图体现了编译子系统的各部分关系,主要体现为:

  • 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
  • 部件是模块的集合,一个模块只能归属于一个部件。
  • 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
  • 部件可以在不同的产品中实现有差异,通过变体或者特性 feature 实现。
  • 模块就是编译子系统的一个编译目标,部件也可以是编译目标。

二、目录结构

  编译构建子系统提供了一个基于 Gnninja 的编译构建框架。根据产品配置,编译生成对应的镜像包。其中编译构建流程为:

    1. 使用 Gn配置构建目标。
    1. Gn 运行后会生成 ninja 文件。
    1. 通过运行 ninja 来执行编译任务。
/build                           # 编译构建主目录
├── __pycache__                   
├── build_scripts/         	     # 编译相关的python脚本
├── config                       # 编译相关的配置项
├── core
│   └── gn                       # 编译入口BUILD.gn配置
├── loader                       # 各个部件配置加载、模板生成
├── ohos                         # OpenHarmony编译打包流程配置
│   ├── kits                     # kits编译打包模板和处理流程
│   ├── ndk                      # ndk模板和处理流程
│   ├── notice                   # notice模板和处理流程
│   ├── packages                 # 版本打包模板和处理流程
│   ├── sa_profile               # sa模板和处理流程
│   ├── sdk                      # sdk模板和处理流程,包括sdk中包含的模块配置
│   └── testfwk                  # 测试相关的处理
├── scripts                      # 编译相关的python脚本
├── templates                    # c/c++编译模板定义
└── toolchain                    # 编译工具链配置
├── tools                        # 常用工具

三、编译方式

  首先,在源码根目录下执行 prebuilts 脚本进行预编译,安装编译器及二进制工具。

bash build/prebuilts_download.sh

  接着,使用命令行方式或hb方式执行编译命令。

 1.命令行方式

  代码根目录下执行全量版本的编译命令:

  • Release版本 :

./build.sh --product-name {product_name}

  • Debug版本 :

/build.sh --product-name {product_name} --gn-args is_debug=true

  • 编译命令支持选项:./build.sh


  ```shell
  -h, --help                                        # 显示帮助信息并退出
  --source-root-dir=SOURCE_ROOT_DIR                 # 指定路径
  --product-name=PRODUCT_NAME                       # 指定产品名
  --device-name=DEVICE_NAME                         # 指定装置名称
  --target-cpu=TARGET_CPU                           # 指定CPU
  --target-os=TARGET_OS                             # 指定操作系统
  -T BUILD_TARGET, --build-target=BUILD_TARGET      # 指定编译目标,可以指定多个
  --gn-args=GN_ARGS                                 # GN参数,支持指定多个
  --ninja-args=NINJA_ARGS                           # Ninja参数,支持指定多个
  -v, --verbose                                     # 生成时显示所有命令行
  --keep-ninja-going                                # 让Ninja持续到1000000个工作失败
  --jobs=JOBS
  --export-para=EXPORT_PARA
  --build-only-gn                                   # 只做GN解析,不运行Ninja
  --ccache                                          # 可选  如果使用ccache,需要本地安装ccache
  --fast-rebuild                                    # 快速重建,默认值为False
  --log-level=LOG_LEVEL                             # 指定编译期间的日志级别','三个级别可选:debug, info and error,default='info'
  --device-type=DEVICE_TYPE                         # 指定设备类型,默认值为'default'
  --build-variant=BUILD_VARIANT                     # 指定设备操作模式,默认值为'user'

 2.hb方式

  hbOpenHarmony 的命令行工具,用来执行编译命令。以下对hb的常用命令进行说明。

hb set

  设置要编译的产品

  • hb set后无参数,进入默认设置流程

  • hb set -root dir 直接设置代码根目录

  • hb set -p 设置要编译的产品

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

hb env

  查看当前设置信息

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

hb build

  编译产品、部件、模块或芯片解决方案。

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

  • hb build 后无参数,会按照设置好的代码路径、产品进行编译,编译选项使用与之前保持一致。-f 选项将删除当前产品所有编译产品,等同于 hb clean + hb build.

  • hb build {component_name} :基于设置好的产品对应的单板、内核,单独编译部件(e.g.:hb build kv_store)。

  • hb build -p ipcamera@hisilicon :免set编译产品,该命令可以跳过set步骤,直接编译产品。

  • 在device/board/device_company下单独执行 hb build 会进入内核选择界面,选择完成后会根据当前路径的单板、选择的内核编译出仅包含内核、驱动的镜像。

hb clean

  清除 out 目录对应产品的编译产物,仅保留args.gn、build.log。清除指定路径可输入路径参数:hb clean out/board/product,默认将清除当前 hb set 的产品对应out路径,这里不执行啦。

hb clean
usage: hb clean [-h] [out_path]

positional arguments:
  out_path    clean a specified path.

optional arguments:
  -h, --help  show this help message and exit

  从上面提供编译选项可知,Harmony是支持模块编译的。


总结

  感谢观看,如果有帮助到你,请给文章点个赞和收藏,让更多的人看到。🌹 🌹 🌹

open harmony编译,鸿蒙系统,# OHOS编译篇,harmonyos,华为

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】
  • 🌼 【鸿蒙系统】
  • 👑 【Python脚本笔记】
  • 🚝 【Java Web项目构建过程】
  • 💛 【数字图像处理】
  • 【JavaScript随手笔记】
  • 🤩 【大数据学习笔记(华为云)】
  • 🦄 【程序错误解决方法(建议收藏)】
  • 🚀 【软件安装教程】



订阅更多,你们将会看到更多的优质内容!!文章来源地址https://www.toymoban.com/news/detail-853930.html

到了这里,关于【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙Harmony ArkUI十大开源项目

    一 ArkUI_Component https://gitee.com/J-Design/ArkUI_Component ArkUI组件库示例App。包括基础组件、容器组件、弹窗组件,可以在预览器或真机中,实时预览组件接口、属性调整的效果。 ArkUI 组件示例覆盖情况 继续研究更新中 组件名称 ArkUI组件示例 备注 基础组件 AlphabetIndexer - Blank - Butto

    2024年02月04日
    浏览(53)
  • 鸿蒙Harmony-相对布局(RelativeContainer)详解

    成年人的世界,从来没有容易二字,想要什么,就得凭自己的努力去拿,遇到事情就得自己生生的硬抗,希望你即使再辛苦,但还是会选择这滚烫的人生,加油陌生的朋友们 目录 一,定义 二,设置依赖关系 2.1 锚点设置 2.2 设置相对于锚点的对齐位置 RelativeContainer为采用相

    2024年02月01日
    浏览(54)
  • 鸿蒙Harmony-层叠布局(Stack)详解

    我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天!  目录 一,定义 二,开发布局 三,对齐方式 3.1 TopStart顶部起始端  3.2 To

    2024年01月18日
    浏览(54)
  • 鸿蒙Harmony-列表组件(List)详解

    不要和别人比生活,每个人阶段不同,追求不同,活法自然也不同。只要今天的你能比昨天的你快乐一点点,那你就是自己人生赢家。 目录 一,定义 二,布局与约束 2.1 布局 2.2 约束 三,开发布局 3.1 设置主轴方向 3.2设置交叉轴布局 四,迭代列表内容 五,自定义列表样式

    2024年01月17日
    浏览(46)
  • 鸿蒙:Harmony开发基础知识详解

    工欲善其事,必先利其器。 上一篇博文实现了一个 \\\"Hello Harmony\\\" 的Demo,今天这篇博文就以 \\\"Hello Harmony\\\"  为例,以官网开发文档为依据,从鸿蒙开发主要的几个方面入手,详细了解一下鸿蒙开发所需的基础知识。 HarmonyOS提供了一套UI开发框架,即 方舟开发框架 ( ArkUI框架 )

    2024年02月05日
    浏览(53)
  • 鸿蒙Harmony-页面路由(router)详解

    慢慢理解世界,慢慢更新自己,希望你的每一个昨天,今天,和明天都会很快乐,你知道的,先好起来的从来都不是生活,而是你自己  目录 一,定义 二,页面跳转 2.1使用router.pushUrl 2.2 使用router.replaceUrl 2.3 使用Single模式 2.4 带参数的跳转  三,页面返回  3.1返回到上一个页

    2024年01月20日
    浏览(47)
  • 鸿蒙harmony加解密算法 写法封装

    最近在看harmony。网络通讯最基础的数据加解密需要封装,以下研究了其写法。其实写法和flutter里 甚至android中代码写法 大同小异,具体算法可自定义修改,只展示原理。 原理: 加密:1.json字符串(待加密原文)通过base64执行decodeSync 2.通过算法转换为byte数组 3.byte转string 解

    2024年02月02日
    浏览(38)
  • 鸿蒙harmony--数据库sqlite详解

    今天是1月20号星期六,早安,岁末大寒至,静后春归来。愿他乡故人,漂泊有归宿,前程有奔赴,愿人间不寒,温暖常伴,诸事顺利,喜乐长安。  目录 一,定义 二,运作机制 三,约束限制 四,接口说明 五,开发步骤 5.1 获取数据库 5.2 创建数据库表 5.3 数据库升降级 5.4插

    2024年01月21日
    浏览(42)
  • 鸿蒙Harmony--状态管理器--@Prop详解

    纵横千里独行客,何惧前路雨潇潇。夜半浊酒慰寂寞,天明走马入红尘。且将新火试新茶,诗酒趁年华。青春以末,壮志照旧,生活以悟,前路未明。时间善变,可执着翻不了篇。时光磨我少年心,却难灭我少年志,壮士活古不活皮。加油。 目录 一,定义 二,装饰器使用规

    2024年02月01日
    浏览(68)
  • 鸿蒙Harmony开发学习(一)运行helloworld

    HarmonyOS与OpenHarmony (1)本质上的不同是:HarmonyOS是鸿蒙操作系统,而OpenHarmony则是从开源项目。这里可以联想一下Android,比如小米手机在Android开源系统的基础上开发了MIUI的手机操作系统,HarmonyOS就类似于MIUI,OpenHarmony类似Android基础底座。 (2)HarmonyOS:是双框架,内聚了AO

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包