OpenHarmony 通过打patch方式实现产品特性化修改
·
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的方式来处理。
更多推荐

所有评论(0)