【鸿蒙PC三方库移植适配框架解读系列】第五篇:完整流程图与角色职责

系列导读:本文是 Lycium 适配系列的第五篇,通过一张完整的流程图展示适配者、Lycium 框架和 OHOS SDK 三者之间的交互关系,并总结各环节的角色职责。


欢迎加入【开源鸿蒙PC社区】,一起共建鸿蒙化C/C++三方库生态。

前言

项目 说明
macOS环境配置 https://bxming.blog.csdn.net/article/details/159284830
Ubuntu环境配置(或者windows + wsl) https://bxming.blog.csdn.net /article/details/159284760
lycium框架 https://atomgit.com/OpenHarmonyPCDeveloper/lycium_plusplus.git
应用平台 HarmonyOS PC

系列索引

篇章 标题 内容
第一篇 概述与环境配置 Lycium 概念、构建机要求、OHOS SDK 配置
第二篇 项目结构与适配目录创建 目录结构、community vs thirdparty、创建适配目录
第三篇 HPKBUILD 编写详解 元数据字段、过程函数、三种构建系统写法
第四篇 构建执行与产物获取 构建流程、日志分析、多库递归、HAP 集成
第五篇 流程图与角色职责 完整流程图、各角色职责、协作时序
第六篇 关键注意事项与最佳实践 依赖管理、架构超集、日志调试、外部适配仓
第七篇 快速参考与模板 入门步骤、模板、完整案例、检查清单

1. 完整流程图

流程图解读

这张图清晰地展示了三个角色在适配流程中的交互:

角色 主要工作
开发者 环境搭建 → 创建 HPKBUILD → 执行构建 → 获取产物 输出"做什么"(HPKBUILD 中的构建逻辑)
Lycium 框架 加载环境 → 解析依赖 → 调度构建 → 循环多架构 负责"怎么做"(编排整个构建流程)
OHOS SDK 提供编译器、toolchain、sysroot 提供"用什么做"(交叉编译能力)

2. 各环节角色职责总结

适配者(库维护者)

适配者是整个流程的核心驱动者,负责:

序号 职责 说明
搭建编译环境 安装基础工具 + 下载配置 OHOS SDK
创建适配目录、编写 HPKBUILD 核心工作:定义元数据 + prepare/build/package 三核心函数
编写开源合规文件 README.OpenSourceOAT.xml
生成 SHA512SUM 校验值 下载源码包后用 sha512sum 生成
编写 OH 补丁 对上游代码做适配修改
调试构建失败 分析日志、迭代 HPKBUILD
编写 HAP 集成文档 docs/hap_integrate.md
HNP 打包配置 hnp.json 配置

Lycium 框架(build.sh + build_hpk.sh)

框架是自动化编排引擎,负责:

序号 职责 说明
加载交叉编译环境 envset.sh 根据不同架构设置编译器路径、CFLAGS 等
依赖拓扑解析与递归调度 读取 depends[],自动排序和递归构建
多架构循环执行构建 archs[] 中每个架构依次执行完整流程
自动注入构建参数 $buildargs(toolchain file、搜索路径、安装前缀)和 $pkgconfigpath
调用 HPKBUILD 各阶段函数 按顺序调用 prepare → build → package → archive → check
源码管理 下载、校验(SHA512SUM)、解压
构建日志记录 每个架构独立日志文件
产物管理 安装目录组织、归档打包、构建记录 CSV

OHOS SDK

SDK 是基础设施提供者,负责:

序号 职责 说明
交叉编译器 arm-linux-ohos-clangaarch64-linux-ohos-clang
LLVM 工具链 ld.lldllvm-arllvm-stripllvm-ranlibllvm-nmllvm-objcopy
CMake + Toolchain OHOS 定制的 cmake + ohos.toolchain.cmake
musl libc sysroot OpenHarmony 系统的 C 运行时库
HNP 打包工具 hnpcli

HPKBUILD 的角色定位

HPKBUILD 是整个适配流程中的适配契约

复制代码
HPKBUILD 以声明式 + 过程式的形式告知框架:
① 元数据:库名、版本、架构、依赖、源码地址
② 构建逻辑:prepare/build/package 等函数的具体实现

关键原则 :框架只提供编排和工具链,不介入具体构建逻辑。具体的编译参数、安装方式等全部由 HPKBUILD 决定。

应用开发者

应用开发者是最终消费者,职责相对简单:

序号 职责 说明
获取产物 usr/<pkgname>/<arch>/output/ 获取已构建好的库文件
集成到 HAP 将 .so / .a / .h 文件复制到 HAP 工程目录
配置链接 在 HAP 工程的 CMakeLists.txt 中配置 target_link_libraries
验证集成 参考 docs/hap_integrate.md 验证集成正确性

3. 角色协作时序


4. 多依赖链示例时序

当目标库有多个依赖时,框架会自动按拓扑排序依次构建。以 libcurl(依赖 opensslzlibnghttp2)为例:

关键提示:适配者只需编写目标库的 HPKBUILD,依赖库由框架自动解决。如果某个依赖也已适配,直接复用;如果未适配,框架会报错提示需要优先构建依赖。


5. 适配全流程速查表

阶段 输入 输出 负责方
0. 环境准备 构建工具 + OHOS SDK 适配者
1. 创建适配目录 下载的源码包 thirdparty/<pkgname>/ 目录结构 适配者
2. 编写 HPKBUILD 库的构建文档 HPKBUILD(元数据 + 函数) 适配者
3. 构建执行 HPKBUILD usr/<pkgname>/ 下的产物 Lycium 框架
4. 产物获取 安装目录中的 .so/.a/.h 归档包 / HNP 包 适配者 / 框架
5. HAP 集成 库产物 可运行的 HAP 应用 应用开发者

下篇预告

了解了整体流程和角色职责后,下一篇将总结适配过程中的关键注意事项和最佳实践,包括依赖管理、架构超集规则、SHA512SUM 校验、日志调试技巧、外部适配仓等内容。

相关推荐
号码认证服务1 小时前
如何让经销商接电话时看到“XX集团”?申请号码认证统一上线
服务器·经验分享·sql·华为·智能手机·华为云·云计算
xiao_li_ya2 小时前
C++学习日记1(`*`的理解、const关键词)
开发语言·c++
聆风吟º2 小时前
【C标准库】深入理解C语言 isalpha 函数详解:判断字符是否为字母
c语言·开发语言·库函数·isalpha
郝学胜-神的一滴3 小时前
Qt 入门 01-02: 开发环境搭建指南
开发语言·c++·qt·客户端
Languorous.3 小时前
C++数据结构高阶|布隆过滤器(Bloom Filter)深度解析:从原理到手写实现,面试高频考点全覆盖
数据结构·c++·面试
山河木马4 小时前
Emscripten 从 C/C++ 调用 JavaScript
前端·javascript·c++
shaodong11234 小时前
HarmonyOS NEXT 数据持久化三剑客:Preferences、RelationalStore 与 KVDB 选型实战
华为·harmonyos
richard_yuu4 小时前
鸿蒙从零搭建参赛项目|心晴驿站:开发环境配置、技术选型与项目规范落地
华为·harmonyos
TANGLONG2224 小时前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax