💌 所属专栏:【鸿蒙系统】
😀 作 者:我是夜阑的狗🐶
🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘
前言
大家好,又见面了,我是夜阑的狗🐶,本文是专栏【鸿蒙系统】专栏的第1篇文章;
今天也要开始学习鸿蒙系统了💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。在学习鸿蒙系统过程中,让我最头疼的就是编译速度好慢,从 git
上拉下来的源码编译过程都是全量编译,这让我倍感焦灼,于是就带着问题深入了解一下鸿蒙系统编译过程,看鸿蒙系统是否支持差分编译或者目标编译;
专栏地址:【鸿蒙系统】 , 此专栏是我是夜阑的狗对鸿蒙系统编译过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
一、编译构建
OpenHarmony编译子系统是以 GN
和 Ninja
构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能:
- 以部件为最小粒度拼装产品和独立编译。
- 支持轻量、小型、标准三种系统的解决方案级版本构建,以及用于支撑应用开发者使用IDE开发的SDK开发套件的构建。
- 支持芯片解决方案厂商的灵活定制和独立编译。
1.基本概念
在了解编译构建子系统的能力前,应了解如下基本概念:
- 平台:开发板和内核的组合,不同平台支持的子系统和部件不同。
- 产品:产品是包含一系列部件的集合,编译后产品的镜像包可以运行在不同的开发板上。
- 子系统:
OpenHarmony
整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层(详见OpenHarmony技术架构)。
系统功能按照“系统 > 子系统 > 部件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或部件。子系统是一个逻辑概念,它具体由对应的部件构成。
- 部件:对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。需要注意的是下文中的芯片解决方案本质是一种特殊的部件。
- 模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。
- 特性:特性是部件用于体现不同产品之间的差异。
- GN:
Generate Ninja
的缩写,用于产生Ninja
文件。 - Ninja:Ninja是一个专注于速度的小型构建系统。
- hb:
OpenHarmony
的命令行工具,用来执行编译命令。
基于以上概念,编译子系统通过配置来实现编译和打包,该子系统主要包括:模块、部件、子系统、产品。
该图体现了编译子系统的各部分关系,主要体现为:
- 子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。
- 部件是模块的集合,一个模块只能归属于一个部件。
- 通过产品配置文件配置一个产品包含的部件列表,部件不同的产品配置可以复用。
- 部件可以在不同的产品中实现有差异,通过变体或者特性
feature
实现。 - 模块就是编译子系统的一个编译目标,部件也可以是编译目标。
二、目录结构
编译构建子系统提供了一个基于 Gn
和 ninja
的编译构建框架。根据产品配置,编译生成对应的镜像包。其中编译构建流程为:
-
- 使用
Gn
配置构建目标。
- 使用
-
-
Gn
运行后会生成ninja
文件。
-
-
- 通过运行
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方式
hb
是 OpenHarmony
的命令行工具,用来执行编译命令。以下对hb的常用命令进行说明。
hb set
设置要编译的产品
-
hb set
后无参数,进入默认设置流程 -
hb set -root dir
直接设置代码根目录 -
hb set -p
设置要编译的产品
hb env
查看当前设置信息
hb build
编译产品、部件、模块或芯片解决方案。
-
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是支持模块编译的。
总结
感谢观看,如果有帮助到你,请给文章点个赞和收藏,让更多的人看到。🌹 🌹 🌹
也欢迎你,关注我。👍 👍 👍
原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!
更多专栏订阅:
文章来源:https://www.toymoban.com/news/detail-853930.html
- 😀 【LeetCode题解(持续更新中)】
- 🌼 【鸿蒙系统】
- 👑 【Python脚本笔记】
- 🚝 【Java Web项目构建过程】
- 💛 【数字图像处理】
- ⚽ 【JavaScript随手笔记】
- 🤩 【大数据学习笔记(华为云)】
- 🦄 【程序错误解决方法(建议收藏)】
- 🚀 【软件安装教程】
订阅更多,你们将会看到更多的优质内容!!文章来源地址https://www.toymoban.com/news/detail-853930.html
到了这里,关于【鸿蒙系统】 ---Harmony 鸿蒙编译构建指导(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!