OpenHarmony 通过打patch方式实现产品特性化修改

环境

系统:OpenHarmony 4.1 release

设备:开发者手机

 

介绍

openharmony对产品需要定制化修改底座代码仓的情况,build子系统提供了先打入patch再开始编译的一种编译方式。

# build/hb/util/prebuild/patch_process.py
    def patch_apply(self, src_path, patch_list, reverse=False):
        ```
            if reverse:
                cmd = f'patch -p1 -R < {patch_path}'
            else:
                cmd = f'patch -p1 < {patch_path}'
            try:
                SystemUtil.exec_command(cmd, log_path=self.config.log_path,
                             cwd=src_path, shell=True)

具体实现

1、需要对代码仓的定制化修改制作成patch,放到产品仓目录,例如vendor/hys/oriloe/patches下,具体路径可以自行定义。

2、在vendor/hys/oriloe/patches下添加patch.yml文件,文件中配置需要打入的patch,build子系统会在vendor下的产品目录读取该文件。

patch.yml文件配置 源码路径+对应的patch文件路径,配置格式如下:

build:
  - vendor/hardmony/oriole/patches/build/0001-add-soc_platform.patch

drivers/hdf_core:
  - vendor/hardmony/oriole/patches/drivers/hdf_core/0001-hdf_core.patch
  - vendor/hardmony/oriole/patches/drivers/hdf_core/0002-hdf_core.patch

base/security/code_signature:
  - vendor/hardmony/oriole/patches/base/security/code_signature/0001-code_signature.patch

一个源码路径可以添加多个patch文件,不需要的patch可以注释或者删除。

 

3、产品编译打入patch,只需在编译命令中添加--patch参数,例如:./build.sh --product--name 产品名  -–ccache --patch

 

注意事项

1、编译时添加patch参数只适用首次编译,首次编译打patch成功后,下次编译需要去掉patch参数。

2、当前社区build系统添加patch参数编译存在报错,需要再编译前注释 build/hb/util/system_util.py 第39、40行

      #    if '' in cmd:
      #         cmd.remove('')

3、如果出现打patch报错,可能出现了rej后缀的冲突文件,需要将该类文件删除。

4、如果想撤销某个patch,可以执行手动操作。进入已打patch的git仓目录,执行

patch -p1 -R < patch文件路径名

 

总结:

如果产品开发基于OH社区底座的某个tag节点,但是存在底座的特性化修改无法上社区时,可以考虑使用打patch的方式来处理。

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐