OpenHarmony-3.0 编译构建流程 原创 精华
【本文正在参与优质创作者激励】
前言
早就打算研究下OH3.0的编译框架了,最近一直在搞移植,总算有点进展了,抽个空来分析下3.0的编译框架。大体看了下和2.0的差别不是特别大,OHOS3.0的打包镜像脚本由原来2.0的build\adapter\build_image.sh 全部修改替换为 build\ohos\images\build_image.py 将打包image镜像的部分制作成build_target,以前是通过shell脚本来调用,现在是通过gn和ninja来调用。主要文件在build\ohos\images这个文件夹下。没有修改的部分就不说了,有需要的可以看我之前的帖子 这篇主要说下不一样的地方,看OH3.0是如何将编译好的文件打包成镜像的。
一、增加编译参数
3.0之后在build\build_scripts\build_common.sh 增加了 build_cmd+=" build_target=images",这句的意思约等于在执行默认编译命令 ./build.sh --product-name Hi3516DV300 会有个默认的参数 --build-target images,具体流程是这样的:
build\build_scripts\build_common.sh => build\core\gn\BUILD.gn => build\ohos\images\BUILD.gn
通常情况下,gn会使用 action 运行一个脚本来生成一个文件,但是这里使用的是 action_with_pydeps,应该也是内置的目标类型。查看官方手册是这么说明的
Inputs and Depfiles
List all files read (or executed) by an action as
inputs
.
- It is not enough to have inputs listed by dependent targets. They must be listed directly by targets that use them, or added by a depfile.
- Non-system Python imports are inputs! For scripts that import such modules, use
action_with_pydeps
to ensure all dependent Python files are captured as inputs.
前面还定义了一个image_list,然后使用 foreach 执行 action_with_pydeps,要生成几个img文件,就执行几次action_with_pydeps。
二、调用python脚本
既然知道了img镜像是由 build\ohos\images\build_image.py 来创建的,那就来分析下这个python脚本。
无论前面执行了什么操作,最终都是为了执行mke2fs、e2fsdroid。
关于这两个命令:
mke2fs:Linux下的命令,用于建立ext文件系统。
e2fsdroid:来自三方库,third_party\e2fsprogs。详情可以参考 http://e2fsprogs.sourceforge.net
感谢大佬持续更新分享。