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(加载产品/部件清单)→ GnNinja 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

相关推荐
梦想不只是梦与想1 天前
鸿蒙 应用发布:软件上传流程(二)
鸿蒙·应用发布·软件上传
轻口味2 天前
HarmonyOS 7 新特性1:闪控窗——轻规划里的专注倒计时,跟着你走出应用
harmonyos·鸿蒙·移动端·闪控窗
骑着蜗牛撵大象3272 天前
从跨平台Linux到鸿蒙PC:基于Qt C++的Flameshot截图工具源码级适配
harmonyos·鸿蒙·es
梦想不只是梦与想3 天前
鸿蒙 云测试:上架测试流程
harmonyos·鸿蒙·云测试
万物智能信息科技4 天前
PWM散热风扇设置—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
人工智能·华为·开源·harmonyos·鸿蒙
JoyCong19984 天前
鸿蒙用户等来的是ToDesk:折叠屏适配、星闪笔、互动Tab一次补齐
人工智能·智能手机·电脑·鸿蒙·鸿蒙系统·远程工作·ipad
aqi004 天前
一文读懂 HarmonyOS 7.0 带来的十大API重要升级
android·华为·harmonyos·鸿蒙·harmony
技术风向解码者5 天前
基于 Kotlin MultiPlatform 的鸿蒙原生跨端实践:Kuikly 在 HarmonyOS NEXT 上的架构与接入思路
鸿蒙·跨端开发·kuikly
深圳市恒星物联科技有限公司5 天前
轻量MCU设备通过OpenHarmony兼容性测评的全流程关键要点与实战踩坑经验
大数据·人工智能·物联网·鸿蒙