OpenHarmony学习笔记【篇一:编译构建机制】

在学习纯血鸿蒙系统各个模块之前,我们需要先了解纯血鸿蒙的编译构建机制。本篇主要基于鸿蒙系统的编译,和各模块的编译配置两个维度去进行梳理。另外编译构建相关代码在如下目录:

一、编译入口

我们先看看纯血鸿蒙系统的开源代码官方介绍说明:

即直接执行./build.sh --product-name xxx 即可开始完整的鸿蒙OS全量编译,但是在开源代码的根目录中并没有找到build.sh文件。

1、开源代码build.sh

如上编译命令执行的build/build_scripts/build.sh脚本,其主要逻辑如下几步:

https://xrefandroid.com/OpenHarmony-v6.0-Release/xref/build/build_scripts/build.sh

步骤一:环境检查

步骤二:工具包初始化

步骤三:命令参数解析

步骤四:编译入口

如上鸿蒙系统最核心的编译入口其实就在build/hb/main.py build 脚本的调用。

2、黄区项目build_system.sh

如下介绍一下我在HW黄区看到的纯血鸿蒙系统的编译模式。还是如上的机制,在根目录中存在build.sh和build_system.sh等脚本,使用方式同上类似。我看到的这个项目的编译命令如下:

./build_system.sh --abi-type generic_arm_32 --device-type hisi_xxx --ccache

虽然有些参数的变化,但是不影响,最终目的还是指定product name,如上命令中编译的是generic_arm_32这个项目。这一块的定义同安卓基本一致,即在device目录下会初始当前项目,至于安卓编译三部曲这块我没有具体深入研究,大概率是不支持了。

如上build_system.sh脚本中有一段核心代码:

bash 复制代码
${PYTHON3}${source_root_dir}/build/hb/main.py  /
         build --product-name ${product_name}${main_params}||{
                echo -e "${HMOS_BUILD_INFO}"
                exit 1
          }

这段代码直接调用了根目录/build/hb/main.py城西,根据如上命令拼接出来之后的命令变成:

/build/hb/main.py build --product-name generic_arm_32 all_phone_standard

如上鸿蒙系统最核心的编译入口其实就在build/hb/main.py build脚本的调用。

3、编译入口build/hb/main.py

如上代码,因为传递的是build参数,所以执行的第93行代码,如果is_indep_build为真就进行独立构建系统,否则就普通构建,两则区别如下:

常规构建 _init_build_module(:139) 独立构建 _init_indep_build_module(:195)
触发 hb set 选产品后 hb build 组件目录下 hb build <组件名> -i(或 --indep-build)
前提 完整 OpenHarmony 源码树 只需要单个组件仓库 ,强制检查当前目录存在 build/indep_configs/build_indep.sh,否则报 you are running hb build command in wrong dir! 退出
组装链路 OHOSPreloader → OHOSLoader(加载产品/部件清单)→ Gn → Ninja PreuiltsService(预建件)+ Hpm(包管理器,自动拉依赖的二进制 prebuilts)+ IndepBuild 服务
依赖来源 源码树内全量源码 从 repo.harmonyos.com 下载依赖组件的预编译产物,本地只 gn/ninja 编当前组件
适用 整机/整镜像构建、产品级集成 组件级开发、CI 单仓验证,不用拉几十 GB 全树

后续的编译构建就不详细介绍了,因为我也不是很清楚。只需要知道编译构建子系统提供了一个基于Gn和ninja的编译构建框架,根据产品配置,编译生成对应的镜像包,其中编译构建流程为:

  • 使用Gn配置构建目标。
  • Gn运行后会生成ninja文件。
  • 通过运行ninja来执行编译任务。

详细参考官方文档说明:https://gitee.com/openharmony/build/blob/master/README_zh.md

二、模块配置

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-module.md#%E6%A8%A1%E5%9D%97

相关推荐
罗四强17 小时前
第2篇:环境搭建:DevEco Studio 安装 + 第一个 Hello World
harmonyos·鸿蒙·鸿蒙系统
OH_TPC2 天前
HarmonyOS APP开发---“动效君“UI动效素材库App,需要用到这个库
ui·华为·harmonyos·鸿蒙
万物智能信息科技2 天前
指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙
熊猫钓鱼>_>3 天前
碰一碰无网近场文件快传与断点续传【鸿蒙心迹】
华为·交互·harmonyos·arkts·鸿蒙·openharmony·鸿蒙心迹
熊猫钓鱼>_>4 天前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
aqi004 天前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
熊猫钓鱼>_>4 天前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
梦想不只是梦与想5 天前
DevEco Studio:Debug界面按钮作用
鸿蒙·断点调试·debug调试
OH_TPC5 天前
HarmonyOS APP开发---“旅图“旅行摄影社区App,需要用到这个库
华为·harmonyos·鸿蒙
●VON6 天前
芯谱:面向 HarmonyOS PC 的 SPICE 电路仿真工作台
华为·鸿蒙·harmony·鸿蒙pc