适配鸿蒙PC sha_ohos.patch 补丁文件详解

张开发
2026/4/9 10:17:24 15 分钟阅读

分享文章

适配鸿蒙PC sha_ohos.patch 补丁文件详解
适配鸿蒙PC sha_ohos.patch 补丁文件详解欢迎大家加入鸿蒙PC社区开源项目地址 目录补丁文件概述补丁文件格式补丁内容详解补丁应用流程关键修改说明补丁管理最佳实践常见问题补丁文件概述什么是补丁文件补丁文件Patch File是一种记录源代码差异的文本文件用于描述如何将一组修改应用到原始代码上。它是开源社区中代码审查、版本控制和跨平台适配的重要工具。sha_ohos.patch 的作用sha_ohos.patch是 SHA 库适配 OpenHarmony 平台的核心文件它记录了所有必要的代码修改使得原始的 BrianGladman/sha 库能够在 OpenHarmony 平台上正确编译和运行。为什么使用补丁优势保持原始代码完整性原始源码不受影响便于版本升级和上游合并清晰的修改历史可追溯性知道修改了什么知道为什么修改便于代码审查可移植性补丁可以应用到不同版本支持跨平台适配便于共享和复用版本控制友好Git 原生支持补丁格式便于存储和管理支持自动化应用与直接修改的对比特性使用补丁直接修改原始代码保持不变被修改版本升级容易困难修改记录清晰不清晰代码审查容易困难可移植性高低维护成本低高补丁文件格式标准补丁格式补丁文件使用标准的 unified diff 格式diff -aurN 原始文件 修改后文件 --- 原始文件 时间戳 修改后文件 时间戳 -起始行,行数 起始行,行数 上下文行 -删除的行 添加的行 上下文行格式详解1. 文件头diff -aurN sha/cmake/PackageConfig.cmake.in sha_patch/cmake/PackageConfig.cmake.indiff: 命令名称-a: 将所有文件视为文本-u: 使用 unified diff 格式-r: 递归处理子目录-N: 将不存在的文件视为空文件sha/cmake/PackageConfig.cmake.in: 原始文件路径sha_patch/cmake/PackageConfig.cmake.in: 修改后文件路径2. 时间戳行--- sha/cmake/PackageConfig.cmake.in 1969-12-31 16:00:00.000000000 -0800 sha_patch/cmake/PackageConfig.cmake.in 2023-09-04 02:06:35.266667302 -0700---: 原始文件标记: 修改后文件标记时间戳文件的修改时间3. 差异块 -0,0 1,11 -0,0: 原始文件从第 0 行开始共 0 行1,11: 修改后文件从第 1 行开始共 11 行表示这是一个新增的文件块4. 修改内容PACKAGE_INIT set(PROJECT_NAME_INCLUDE_DIRS ${PACKAGE_PREFIX_DIR}/include ${PACKAGE_PREFIX_DIR}/include/TARGET_NAME): 表示新增的行-: 表示删除的行无标记: 表示未修改的上下文行补丁内容详解sha_ohos.patch 完整内容分析1. 新增 CMake 包配置文件diff -aurN sha/cmake/PackageConfig.cmake.in sha_patch/cmake/PackageConfig.cmake.in --- sha/cmake/PackageConfig.cmake.in 1969-12-31 16:00:00.000000000 -0800 sha_patch/cmake/PackageConfig.cmake.in 2023-09-04 02:06:35.266667302 -0700 -0,0 1,11 PACKAGE_INIT set(PROJECT_NAME_INCLUDE_DIRS ${PACKAGE_PREFIX_DIR}/include ${PACKAGE_PREFIX_DIR}/include/TARGET_NAME) set(PROJECT_NAME_SHARED_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/libTARGET_NAME.so) set(PROJECT_NAME_STATIC_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/libTARGET_NAME_static.a) include(CMakeFindDependencyMacro) include(${CMAKE_CURRENT_LIST_DIR}/TARGET_NAMETargets.cmake) check_required_components(TARGET_NAME)文件说明PackageConfig.cmake.in是 CMake 包配置模板文件用于支持其他项目通过find_package()命令查找和使用 SHA 库。逐行解析PACKAGE_INITCMake 宏初始化包配置set(PROJECT_NAME_INCLUDE_DIRS ${PACKAGE_PREFIX_DIR}/include ${PACKAGE_PREFIX_DIR}/include/TARGET_NAME)设置头文件路径变量PROJECT_NAME将被替换为shaTARGET_NAME将被替换为sha结果set(sha_INCLUDE_DIRS ...)和set(sha_INCLUDE_DIRS .../sha)set(PROJECT_NAME_SHARED_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/libTARGET_NAME.so) set(PROJECT_NAME_STATIC_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/libTARGET_NAME_static.a)设置库文件路径变量结果set(sha_SHARED_LIBRARIES .../lib/libsha.so)结果set(sha_STATIC_LIBRARIES .../lib/libsha_static.a)include(CMakeFindDependencyMacro)包含 CMake 查找依赖宏include(${CMAKE_CURRENT_LIST_DIR}/TARGET_NAMETargets.cmake)包含目标配置文件结果include(.../shaTargets.cmake)check_required_components(TARGET_NAME)检查必需的组件结果check_required_components(sha)使用示例# 在其他项目的 CMakeLists.txt 中 find_package(sha REQUIRED) # 使用头文件 target_include_directories(myapp PRIVATE ${sha_INCLUDE_DIRS}) # 链接库 target_link_libraries(myapp PRIVATE ${sha_STATIC_LIBRARIES})2. 新增完整的 CMakeLists.txtdiff -aurN sha/CMakeLists.txt sha_patch/CMakeLists.txt --- sha/CMakeLists.txt 1969-12-31 16:00:00.000000000 -0800 sha_patch/CMakeLists.txt 2023-09-04 02:59:30.903920444 -0700 -0,0 1,103 cmake_minimum_required (VERSION 3.12) project(SHA) enable_language(C CXX) set(TARGET_NAME sha) set(TARGET_INSTALL_INCLUDEDIR include) set(TARGET_INSTALL_BINDIR bin) set(TARGET_INSTALL_LIBDIR lib) set(TARGET_INSTALL_ELEMENT ) include_directories(./) add_library(sha SHARED sha1.c sha2.c hmac.c) list(APPEND TARGET_INSTALL_ELEMENT sha) add_library(sha_static STATIC sha1.c sha2.c hmac.c) list(APPEND TARGET_INSTALL_ELEMENT sha_static) add_executable(hmac hmac_test.c) target_link_libraries(hmac PRIVATE sha_static) list(APPEND TARGET_INSTALL_ELEMENT hmac) add_executable(pwd2key pwd2key.c) target_link_libraries(pwd2key PRIVATE sha_static) target_compile_definitions(pwd2key PRIVATE -DTEST) list(APPEND TARGET_INSTALL_ELEMENT pwd2key) add_executable(sha_test sha_test.c) target_link_libraries(sha_test PRIVATE sha_static) if(OHOS) target_compile_options(sha_test PRIVATE -Wno-format-security) endif() list(APPEND TARGET_INSTALL_ELEMENT sha_test) if(WIN32) add_executable(sha_time sha_time.c) target_link_libraries(sha_time PRIVATE sha) list(APPEND TARGET_INSTALL_ELEMENT sha_time) endif() add_executable(sha256sum shasum.c) target_link_libraries(sha256sum PRIVATE sha_static) list(APPEND TARGET_INSTALL_ELEMENT sha256sum) enable_testing() add_test(NAME test_hmac COMMAND hmac) add_test(NAME test_pwd2key COMMAND pwd2key) add_test(NAME test_sha COMMAND sha_test) if(WIN32) add_test(NAME test_time COMMAND sha_time) endif() install( TARGETS ${TARGET_INSTALL_ELEMENT} EXPORT ${TARGET_NAME} PUBLIC_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR} PRIVATE_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR} RUNTIME DESTINATION ${TARGET_INSTALL_BINDIR} LIBRARY DESTINATION ${TARGET_INSTALL_LIBDIR} ARCHIVE DESTINATION ${TARGET_INSTALL_LIBDIR}) file(GLOB ALL_HEAD *.h) install( FILES ${ALL_HEAD} DESTINATION ${TARGET_INSTALL_INCLUDEDIR}/${TARGET_NAME}) install( EXPORT ${TARGET_NAME} FILE ${TARGET_NAME}Targets.cmake DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} ) include(CMakePackageConfigHelpers) write_basic_package_version_file( ${TARGET_NAME}ConfigVersion.cmake VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} COMPATIBILITY SameMajorVersion ) configure_package_config_file( cmake/PackageConfig.cmake.in ${TARGET_NAME}Config.cmake INSTALL_DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}ConfigVersion.cmake DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} )CMakeLists.txt 详细解析第一部分基本设置cmake_minimum_required (VERSION 3.12) project(SHA) enable_language(C CXX) set(TARGET_NAME sha) set(TARGET_INSTALL_INCLUDEDIR include) set(TARGET_INSTALL_BINDIR bin) set(TARGET_INSTALL_LIBDIR lib) set(TARGET_INSTALL_ELEMENT )说明要求 CMake 3.12 或更高版本定义项目名称为 SHA启用 C 和 C 语言支持设置目标名称和安装路径变量第二部分包含头文件include_directories(./)说明将当前目录添加到头文件搜索路径使得源文件可以直接包含项目内的头文件第三部分构建库文件add_library(sha SHARED sha1.c sha2.c hmac.c) list(APPEND TARGET_INSTALL_ELEMENT sha) add_library(sha_static STATIC sha1.c sha2.c hmac.c) list(APPEND TARGET_INSTALL_ELEMENT sha_static)关键点同时构建动态库和静态库add_library(sha SHARED sha1.c sha2.c hmac.c) # 动态库 add_library(sha_static STATIC sha1.c sha2.c hmac.c) # 静态库使用相同的源文件两个库都使用sha1.c,sha2.c,hmac.c避免代码重复便于维护添加到安装列表list(APPEND TARGET_INSTALL_ELEMENT sha) list(APPEND TARGET_INSTALL_ELEMENT sha_static)第四部分构建可执行文件 ⭐关键修改add_executable(hmac hmac_test.c) target_link_libraries(hmac PRIVATE sha_static) list(APPEND TARGET_INSTALL_ELEMENT hmac) add_executable(pwd2key pwd2key.c) target_link_libraries(pwd2key PRIVATE sha_static) target_compile_definitions(pwd2key PRIVATE -DTEST) list(APPEND TARGET_INSTALL_ELEMENT pwd2key) add_executable(sha_test sha_test.c) target_link_libraries(sha_test PRIVATE sha_static) if(OHOS) target_compile_options(sha_test PRIVATE -Wno-format-security) endif() list(APPEND TARGET_INSTALL_ELEMENT sha_test) add_executable(sha256sum shasum.c) target_link_libraries(sha256sum PRIVATE sha_static) list(APPEND TARGET_INSTALL_ELEMENT sha256sum)关键修改详解修改 1静态链接原始代码假设target_link_libraries(hmac PRIVATE sha)修改后target_link_libraries(hmac PRIVATE sha_static)原因分析动态链接的问题运行时需要libsha.so错误Error loading shared library libsha.so: No such file or directory需要设置LD_LIBRARY_PATH静态链接的优势可执行文件独立运行无需管理库路径避免版本冲突适合工具程序适用场景HMAC 工具独立运行的测试工具pwd2key 工具密钥派生工具sha_test 工具测试工具sha256sum 工具校验和工具修改 2OpenHarmony 特定配置add_executable(sha_test sha_test.c) target_link_libraries(sha_test PRIVATE sha_static) if(OHOS) target_compile_options(sha_test PRIVATE -Wno-format-security) endif() list(APPEND TARGET_INSTALL_ELEMENT sha_test)说明if(OHOS): 仅在 OpenHarmony 平台执行-Wno-format-security: 禁用格式安全警告PRIVATE: 编译选项仅对当前目标有效为什么需要这个选项OpenHarmony 的编译器对格式化字符串检查更严格某些合法的代码可能触发警告。使用-Wno-format-security可以避免这些不必要的警告。第五部分测试配置enable_testing() add_test(NAME test_hmac COMMAND hmac) add_test(NAME test_pwd2key COMMAND pwd2key) add_test(NAME test_sha COMMAND sha_test) if(WIN32) add_test(NAME test_time COMMAND sha_time) endif()说明enable_testing(): 启用 CTest 测试框架add_test(): 定义测试用例NAME: 测试用例名称COMMAND: 要执行的命令测试内容测试名称测试内容测试文件test_hmacHMAC 功能测试hmactest_pwd2key密钥派生测试pwd2keytest_shaSHA 算法测试sha_testtest_time性能测试仅 Windowssha_time第六部分安装规则install( TARGETS ${TARGET_INSTALL_ELEMENT} EXPORT ${TARGET_NAME} PUBLIC_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR} PRIVATE_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR} RUNTIME DESTINATION ${TARGET_INSTALL_BINDIR} LIBRARY DESTINATION ${TARGET_INSTALL_LIBDIR} ARCHIVE DESTINATION ${TARGET_INSTALL_LIBDIR})安装规则说明安装类型目标路径说明RUNTIMEbin/可执行文件LIBRARYlib/动态库 (.so)ARCHIVElib/静态库 (.a)PUBLIC_HEADERinclude/公共头文件PRIVATE_HEADERinclude/私有头文件安装后的目录结构usr/sha/{arch}/ ├── bin/ │ ├── hmac │ ├── pwd2key │ ├── sha_test │ └── sha256sum ├── include/ │ └── sha/ │ ├── sha1.h │ ├── sha2.h │ ├── hmac.h │ └── pwd2key.h └── lib/ ├── libsha.so ├── libsha_static.a └── cmake/ └── sha/ ├── shaConfig.cmake ├── shaConfigVersion.cmake └── shaTargets.cmake第七部分安装头文件file(GLOB ALL_HEAD *.h) install( FILES ${ALL_HEAD} DESTINATION ${TARGET_INSTALL_INCLUDEDIR}/${TARGET_NAME})说明file(GLOB ALL_HEAD *.h): 查找所有头文件安装到include/sha/目录下安装的头文件include/sha/ ├── sha1.h ├── sha2.h ├── hmac.h ├── pwd2key.h ├── brg_endian.h ├── brg_types.h └── rdtsc.h第八部分生成 CMake 配置文件install( EXPORT ${TARGET_NAME} FILE ${TARGET_NAME}Targets.cmake DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} ) include(CMakePackageConfigHelpers) write_basic_package_version_file( ${TARGET_NAME}ConfigVersion.cmake VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} COMPATIBILITY SameMajorVersion ) configure_package_config_file( cmake/PackageConfig.cmake.in ${TARGET_NAME}Config.cmake INSTALL_DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}ConfigVersion.cmake DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME} )生成的文件shaTargets.cmake: 目标配置文件定义库的导入目标包含编译选项和链接选项shaConfigVersion.cmake: 版本配置文件定义包的版本信息版本兼容性规则shaConfig.cmake: 主配置文件包含所有必要的信息支持find_package(sha)命令使用示例# 在其他项目的 CMakeLists.txt 中 find_package(sha REQUIRED) # 使用导入目标 target_link_libraries(myapp PRIVATE sha::sha_static) # 或者使用变量 target_include_directories(myapp PRIVATE ${sha_INCLUDE_DIRS}) target_link_libraries(myapp PRIVATE ${sha_STATIC_LIBRARIES})补丁应用流程应用补丁的完整流程┌─────────────────────────────────────┐ │ 补丁应用流程 │ └─────────────────────────────────────┘ │ ▼ ┌───────────────────┐ │ 1. 准备原始源码 │ │ git clone │ └───────────────────┘ │ ▼ ┌───────────────────┐ │ 2. 切换到指定版本 │ │ git reset --hard │ └───────────────────┘ │ ▼ ┌───────────────────┐ │ 3. 应用补丁 │ │ patch -p1 │ │ sha_ohos.patch │ └───────────────────┘ │ ▼ ┌───────────────────┐ │ 4. 验证修改 │ │ 检查文件是否正确 │ └───────────────────┘ │ ▼ ┌───────────────────┐ │ 5. 构建和测试 │ │ 验证功能正常性 │ └───────────────────┘在 HPKBUILD 中的应用prepare(){if[$download_and_patch_flagtrue];then# 步骤 1: 克隆源码gitclone$source$builddirif[$?-ne0];thenreturn-1fi# 步骤 2: 切换到指定版本cd$builddirgitreset--hard$pkgverif[$?-ne0];thencd$OLDPWDreturn-2fi# 步骤 3: 应用补丁patch-p1../sha_ohos.patchcd$OLDPWD# 标记已完成download_and_patch_flagfalsefi# 步骤 4: 创建构建目录mkdir-p$builddir/$ARCH-build}手动应用补丁# 1. 进入源码目录cdsha-3ee0d88fc4f629b2e084f1b4cbf22cd3597542fb# 2. 应用补丁patch-p1../sha_ohos.patch# 3. 查看修改gitdiff# 4. 如果需要撤销补丁patch-R-p1../sha_ohos.patch补丁应用参数说明patch-p1../sha_ohos.patch-p1: 去除路径的第一层补丁文件中的路径sha/cmake/PackageConfig.cmake.in实际文件路径cmake/PackageConfig.cmake.in-p1表示去掉sha/这一层: 从标准输入读取补丁../sha_ohos.patch: 补丁文件路径相对于源码目录常见问题处理问题 1补丁应用失败错误信息patch: **** Cant rename .git/cmake/PackageConfig.cmake.in to cmake/PackageConfig.cmake.in.orig : No such file or directory解决方案# 清理 git 状态gitclean-fd# 重新应用补丁patch-p1../sha_ohos.patch问题 2版本不匹配错误信息Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED可能原因源码版本与补丁版本不匹配文件已被修改解决方案# 检查源码版本gitlog--oneline-1# 确认版本是否匹配# 如果不匹配需要重新生成补丁问题 3文件已存在错误信息File exists: cmake/PackageConfig.cmake.in解决方案# 删除已存在的文件rmcmake/PackageConfig.cmake.in# 重新应用补丁patch-p1../sha_ohos.patch关键修改说明修改 1静态链接策略 ⭐原始代码假设add_executable(hmac hmac_test.c) target_link_libraries(hmac PRIVATE sha)修改后add_executable(hmac hmac_test.c) target_link_libraries(hmac PRIVATE sha_static)影响的文件hmac→sha_staticpwd2key→sha_staticsha_test→sha_staticsha256sum→sha_static为什么这样修改问题Error loading shared library libsha.so: No such file or directory原因可执行文件在运行时需要动态链接库libsha.so不在系统的库搜索路径中需要设置LD_LIBRARY_PATH环境变量解决使用静态链接将库代码直接编译到可执行文件中可执行文件独立运行无需额外配置优缺点对比特性动态链接静态链接采用文件大小小大内存占用低多进程共享高部署复杂度高低运行时依赖需要库文件无更新便利性高低适用场景系统库、频繁更新的库工具程序、独立应用选择静态链接的理由SHA 库体积小源代码文件少编译后的库文件不大静态链接增加的体积可忽略简化部署不需要管理库路径不需要设置环境变量避免版本冲突问题适合工具程序HMAC、pwd2key 等是独立工具通常单独运行不需要共享库的优势提高可靠性减少运行时错误避免库版本不匹配便于调试和测试修改 2OpenHarmony 特定配置add_executable(sha_test sha_test.c) target_link_libraries(sha_test PRIVATE sha_static) if(OHOS) target_compile_options(sha_test PRIVATE -Wno-format-security) endif() list(APPEND TARGET_INSTALL_ELEMENT sha_test)为什么需要这个配置编译器警告warning: format not a string literal and no format arguments [-Wformat-security]原因OpenHarmony 的 Clang 编译器对格式化字符串检查更严格某些合法的代码可能触发警告不影响功能但会产生大量警告信息解决方案使用-Wno-format-security禁用此警告仅在 OpenHarmony 平台应用不影响其他平台修改 3新增 CMake 配置文件PackageConfig.cmake.in作用支持find_package(sha)命令提供库的路径和依赖关系便于其他项目集成使用示例# 在其他项目中 find_package(sha REQUIRED) # 使用头文件 target_include_directories(myapp PRIVATE ${sha_INCLUDE_DIRS}) # 链接库 target_link_libraries(myapp PRIVATE ${sha_STATIC_LIBRARIES})修改 4完整的测试配置enable_testing() add_test(NAME test_hmac COMMAND hmac) add_test(NAME test_pwd2key COMMAND pwd2key) add_test(NAME test_sha COMMAND sha_test)测试内容HMAC 功能测试密钥派生测试SHA 算法测试运行测试cdbuild ctest补丁管理最佳实践1. 补丁文件命名推荐格式{库名}_{平台}_{描述}.patch示例sha_ohos.patch- SHA 库的 OpenHarmony 适配补丁sha_fix_memory_leak.patch- 修复内存泄漏的补丁sha_add_feature.patch- 添加新功能的补丁2. 补丁文件组织推荐目录结构patches/ ├── sha_ohos.patch ├── sha_fix_memory_leak.patch └── README.mdREADME.md 内容# 补丁文件说明 ## sha_ohos.patch - 描述OpenHarmony 平台适配 - 版本v1.0 - 应用版本3ee0d88 - 修改内容 - 静态链接配置 - CMake 配置文件 - OpenHarmony 特定选项 ## sha_fix_memory_leak.patch - 描述修复内存泄漏问题 - 版本v1.1 - 应用版本3ee0d88 - 修改内容 - 修复 hmac.c 中的内存泄漏 - 添加资源释放代码3. 补丁版本管理版本号规则v1.0: 初始版本v1.1: 修复版本v2.0: 重大更新版本兼容性sha_ohos_v1.0.patch → 适用于 3ee0d88 版本 sha_ohos_v1.1.patch → 适用于 3ee0d88 版本修复 sha_ohos_v2.0.patch → 适用于 abcdef12 版本重大更新4. 补丁测试流程# 1. 测试补丁应用cdtest_source_dir patch-p1../sha_ohos.patch# 2. 验证修改gitdiff# 3. 构建测试mkdirbuildcdbuild cmake..make# 4. 功能测试./bin/sha_test ./bin/hmac# 5. 清理cd..rm-rfbuild patch-R-p1../sha_ohos.patch5. 补丁生成方法方法 1使用 git diff# 1. 克隆原始仓库gitclone https://github.com/BrianGladman/sha.git sha_orig# 2. 克隆修改后的仓库gitclone https://github.com/yourname/sha.git sha_mod# 3. 生成补丁gitdiffsha_orig sha_modsha_ohos.patch方法 2使用 diff 命令# 生成补丁diff-aurNsha_orig sha_modsha_ohos.patch方法 3使用 git format-patch# 在修改后的仓库中gitformat-patch-1HEADsha_ohos.patch6. 补丁审查清单在应用补丁前检查以下内容补丁格式正确版本信息完整修改说明清晰不包含敏感信息测试通过文档更新常见问题Q1: 如何撤销已应用的补丁解决方案# 方法 1使用 patch -Rpatch-R-p1../sha_ohos.patch# 方法 2使用 git如果使用 git 管理gitcheckout.# 方法 3手动删除修改的文件rmCMakeLists.txt cmake/PackageConfig.cmake.inQ2: 补丁应用后如何验证修改解决方案# 查看修改的文件gitstatus# 查看具体修改gitdiffCMakeLists.txt# 查看新增的文件gitls-files--others--exclude-standardQ3: 如何修改补丁文件解决方案# 1. 撤销补丁patch-R-p1../sha_ohos.patch# 2. 手动修改代码# 编辑需要修改的文件# 3. 重新生成补丁gitdiffsha_ohos_new.patch# 4. 替换原补丁mvsha_ohos_new.patch sha_ohos.patchQ4: 补丁文件太大怎么办解决方案# 1. 检查补丁内容head-50sha_ohos.patch# 2. 排除不必要的文件# 在生成补丁时使用 .gitignore# 3. 分离补丁# 将不同功能的修改分成多个补丁文件Q5: 如何处理补丁冲突解决方案# 1. 应用补丁时显示冲突patch-p1../sha_ohos.patch# 2. 手动解决冲突# 编辑标记为冲突的文件# 3. 标记为已解决patch-p1../sha_ohos.patch# 4. 验证修改gitdiffQ6: 补丁文件包含二进制文件怎么办解决方案# 1. 使用 git binary diffgitdiff--binarysha_ohos.patch# 2. 使用 xxd 转换xxd-bbinary_filebinary_file.hex# 3. 在补丁中包含转换后的文件# 应用时再转换回来Q7: 如何确保补丁可重现解决方案# 1. 记录补丁生成环境echoOS:$(uname-s)sha_ohos.patch.metaechoPatch version: v1.0sha_ohos.patch.metaechoSource version: 3ee0d88sha_ohos.patch.meta# 2. 记录测试结果echoTest status: PASSEDsha_ohos.patch.metaechoTest date:$(date)sha_ohos.patch.metaQ8: 补丁文件的安全性如何保证解决方案使用 SHA512 校验sha512sum sha_ohos.patchsha_ohos.patch.sha512使用 GPG 签名gpg --detach-sign--armorsha_ohos.patch验证补丁# 验证校验和sha512sum-csha_ohos.patch.sha512# 验证签名gpg--verifysha_ohos.patch.asc总结sha_ohos.patch是 SHA 库适配 OpenHarmony 平台的核心文件它记录了所有必要的代码修改。通过本文档的详细解析我们了解了核心要点补丁文件格式标准的 unified diff 格式补丁内容CMake 配置、静态链接、OpenHarmony 特定选项关键修改静态链接解决动态库问题应用流程从源码获取到补丁应用的完整步骤最佳实践补丁管理和维护的经验技术要点✅ 静态链接策略避免运行时依赖✅ OpenHarmony 特定配置处理编译警告✅ 完整的 CMake 配置支持跨平台✅ 自动化测试确保功能正确性实践建议使用补丁管理代码修改保持原始代码完整性详细记录补丁信息和测试结果定期更新和维护补丁文件通过正确使用和管理补丁文件我们可以高效地进行跨平台适配同时保持代码的可维护性和可追溯性。文档版本: 1.0.0最后更新: 2026-04-08

更多文章