引言
OpenHarmony作为一款面向全场景的分布式操作系统,其构建系统在开发过程中扮演着至关重要的角色。本文将详细介绍OpenHarmony构建系统下的一个gn封装脚本,该脚本用于管理和执行 gn
命令,更高效地管理构建过程。
位置:/build/hb/services/gn.py
脚本概述
该脚本定义了一个 Gn
类,继承自 BuildFileGeneratorInterface
接口,并实现了多个方法来执行不同的 gn
命令。这些命令包括生成构建文件、查询路径、描述目标、列出目标、引用检查、格式化和清理等。
脚本结构
1. 导入必要的模块
import sys
import os
from enum import Enumfrom containers.status import throw_exception
from exceptions.ohos_exception import OHOSException
from services.interface.build_file_generator_interface import BuildFileGeneratorInterface
from resources.config import Config
from containers.arg import Arg, ModuleType
from util.system_util import SystemUtil
from util.io_util import IoUtil
from util.log_util import LogUtil
sys
和os
模块用于处理系统相关的操作。Enum
用于定义枚举类型。throw_exception
是一个装饰器,用于捕获和处理异常。OHOSException
是自定义的异常类。BuildFileGeneratorInterface
是接口类,定义了构建文件生成器的基本方法。Config
类用于读取和管理配置文件。Arg
和ModuleType
用于处理命令行参数。SystemUtil
和IoUtil
提供系统和输入输出相关的工具函数。LogUtil
用于日志记录。
2. 定义枚举类型 CMDTYPE
class CMDTYPE(Enum):GEN = 1PATH = 2DESC = 3LS = 4REFS = 5FORMAT = 6CLEAN = 7
CMDTYPE
枚举类型定义了gn
命令的类型,包括生成构建文件 (GEN
)、查询路径 (PATH
)、描述目标 (DESC
)、列出目标 (LS
)、引用检查 (REFS
)、格式化 (FORMAT
) 和清理 (CLEAN
)。
3. Gn
类定义
class Gn(BuildFileGeneratorInterface):def __init__(self):super().__init__()self.config = Config()self._regist_gn_path()def run(self):self.execute_gn_cmd(CMDTYPE.GEN)
Gn
类继承自BuildFileGeneratorInterface
接口。__init__
方法初始化Gn
类实例,读取配置文件并注册gn
可执行文件路径。run
方法默认执行生成构建文件的命令。
4. 注册 gn
可执行文件路径
@throw_exception
def _regist_gn_path(self):gn_path = os.path.join(self.config.root_path, 'prebuilts/build-tools/{}-x86/bin/gn'.format(sys.platform))if os.path.exists(gn_path):self.exec = gn_pathelse:raise OHOSException('There is no gn executable file at {}'.format(gn_path), '0001')
_regist_gn_path
方法根据系统平台查找gn
可执行文件的路径,并存储在self.exec
中。- 如果路径不存在,抛出
OHOSException
异常。
5. 转换注册的参数和标志
def _convert_args(self) -> list:args_list = []for key, value in self.args_dict.items():if isinstance(value, bool):args_list.append('{}={}'.format(key, str(value