这篇文章是针对 OpenHarmony_release_v1.1.0 LTS 这个版本分析。 # 1.hb工具是啥 hb是HarmonyOS2.0里新增加的编译构建命令行工具。需要Python 3.7.4及以上版本的支持,建议安装3.8.x。源码在OpenHarmony\build\lite\hb这个目录下。 安装方法,可以直接使用pip安装打包好的工具。但是我们为了方便调试,我们直接使用源码进行单步调试。 ```shell python3 -m pip install --user ohos-build ``` # 2.开启单步调试  我的环境是Ubuntu20.04,安装VScode,新建VScode调试脚本,脚本内容如下 ```json { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "hb build debug", "type": "python", "request": "launch", "program": "./build/lite/hb/__main__.py", "console": "integratedTerminal", "args": ["build"], "stopOnEntry": true } ] } ``` 调试前,使用hb set设置好参数。查看我这次调试用的hb环境参数,hb env调取的是ohos_config.json ``` hb env [OHOS INFO] root path: /home/bright/harmony110 [OHOS INFO] board: hispark_pegasus [OHOS INFO] kernel: liteos_m [OHOS INFO] product: wifiiot_hispark_pegasus [OHOS INFO] product path: /home/bright/harmony110/vendor/hisilicon/hispark_pegasus [OHOS INFO] device path: /home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos ``` hb启动入口:build\lite\hb\__main__.py # 3.分析hb编译构建 接下来按F5启动调试,就可以就行调试了。  下面是我分析得到的结果,如有不对的地方欢迎指正。 第一步:各种初始化 ```shell Z:\OpenHarmony\build\lite\hb\__main__.py # 获取参数,执行到这里,各种import...才算完成 args = parser.parse_args() # 执行命令参数,建议断点打在这里 status = args.command(args) ``` 第二步:读取json数据文件 utils.py:46 read_json_file(),首先读取的是ohos_config.json 接着是config.json,通过下面的循环,获取json文件的参数。build\lite\hb\common\product.py ```python @staticmethod def get_features(product_json): if not os.path.isfile(product_json): raise Exception('{} not found'.format(product_json)) features_list = [] subsystems = read_json_file(product_json).get('subsystems', []) for subsystem in subsystems: for component in subsystem.get('components', []): features = component.get('features', []) features_list += [feature for feature in features if len(feature)] return features_list ``` 第三步:要生成输出文件夹,并执行gn、ninja命令 build/lite/hb/build/build_process.py: ```c 120行:生成输出文件夹 makedirs(self.config.out_path) 107行:要执行的命令放在cmd_list列表里。 for exec_cmd in cmd_list: exec_cmd(cmd_args) 这里调试的hb build 执行了2次命令,分析如下: 131行:第一次 def gn_build(self, cmd_args): # 清空输出目录,把wifiiot_hispark_pegasus整个删除,再重新建立 remove_path(self.config.out_path) makedirs(self.config.out_path) # Gn命令初始化和执行。 gn_cmd的值:就是生成的 build.ninja的头部 + args.gn的内容 ['/home/bright/developtools/gn/gn', 'gen', '/home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus', '--root=/home/bright/harmony110', '--dotfile=/home/bright/harmony110/build/lite/.gn', '--script-executable=python3', '--args=ohos_build_type="debug" ohos_build_compiler_specified="clang" ohos_build_compiler_dir="/home/bright/developtools/llvm" product_path="/home/bright/harmony110/vendor/hisilicon/hispark_pegasus" device_path="/home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos" ohos_kernel_type="liteos_m" ohos_full_compile=true'] # 注意!:接下来执行命令写入日志,生成*.ninja等文件。 exec_command(gn_cmd, log_path=self.config.log_path) # gn生产ninja文件,此时输出目录会生产下列文件 "\out\hispark_pegasus\wifiiot_hispark_pegasus\obj" "\out\hispark_pegasus\wifiiot_hispark_pegasus\args.gn" "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.ninja" "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.ninja.d" "\out\hispark_pegasus\wifiiot_hispark_pegasus\toolchain.ninja" 171行:第二次 def ninja_build(self, cmd_args): ninja_cmd的值:ninja -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus # 执行完这句的时候,最终的镜像文件就已经生成了。 "\out\hispark_pegasus\wifiiot_hispark_pegasus\gen" "\out\hispark_pegasus\wifiiot_hispark_pegasus\libs" "\out\hispark_pegasus\wifiiot_hispark_pegasus\obj" "\out\hispark_pegasus\wifiiot_hispark_pegasus\.ninja_log" "\out\hispark_pegasus\wifiiot_hispark_pegasus\build.log" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_boot_signed.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_boot_signed_B.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_loader_signed.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.asm" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.map" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app.out" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_allinone.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_burn.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_flash_boot_ota.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_ota.bin" "\out\hispark_pegasus\wifiiot_hispark_pegasus\Hi3861_wifiiot_app_vercfg.bin" ``` 总结整个流程就是, 1. 初始化工具。 2. 提取配置文件ohos_config.json、config.json。 3. 生成输出文件夹。 4. 通过配置文件参数执行两条gn、ninja命令。然后打印信息,写入log文件。 接下来添加打印信息,验证我们的结论。注意!:不要使用打包好的hb命令,使用源码构建命令才能显示我们添加的信息。 ```python build\lite\hb\common\utils.py:77行 print(cmd) # 控制台,输出cmd # 然后在鸿蒙主目录执行 build/lite/hb/__main__.py build # 将会看到我们添加的命令输出了执行的命令内容。 ``` 最后,我们测试下,不使用鸿蒙hb构建系统,手动执行gn、ninja命令,来生成鸿蒙 ```shell gn gen /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus --root=/home/bright/harmony110 --dotfile=/home/bright/harmony110/build/lite/.gn --script-executable=python3 '--args=ohos_build_type="debug" ohos_build_compiler_specified="clang" ohos_build_compiler_dir="/home/bright/developtools/llvm" product_path="/home/bright/harmony110/vendor/hisilicon/hispark_pegasus" device_path="/home/bright/harmony110/device/hisilicon/hispark_pegasus/sdk_liteos" ohos_kernel_type="liteos_m" ohos_full_compile=true' ninja -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus //加上-v可以显示编译命令 ninja -v -w dupbuild=warn -C /home/bright/harmony110/out/hispark_pegasus/wifiiot_hispark_pegasus ``` 好了,以上就是针对 OpenHarmony_release_v1.1.0 LTS 编译构建hb工具的分析。2.0的构建加入了build.sh,会有不同,之后更新新版分析。如果对你有所帮助,别忘了三联支持下。 [想了解更多关于鸿蒙的内容,请访问:](https://harmonyos.51cto.com/#bkwz) [51CTO和华为官方战略合作共建的鸿蒙技术社区](https://harmonyos.51cto.com/#bkwz) https://harmonyos.51cto.com/#bkwz
微信关注我们
原文链接:https://blog.51cto.com/harmonyos/2896471
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源Oracle
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
Apache Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。