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

一、编译入口

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

即直接执行./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脚本中有一段核心代码:

${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(加载产品/部件清单)→ GnNinjaPreuiltsService(预建件)+ 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

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐