鸿蒙三方库适配HPKCHECK 文件执行流程详解
HPKCHECK 文件是通过执行 test.sh 脚本来运行的。现在解释整个执行流程:
1. 执行入口
bash
cd /path/to/lycium_plusplus/lycium
./test.sh [库名1] [库名2] ...
或者测试所有库:
bash
./test.sh
2. 执行流程图
┌─────────────────────────────────────┐
│ 执行 test.sh 脚本 │
│ (在 OpenHarmony 设备上运行) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ main() 函数入口 │
│ - 设置 LYCIUM_ROOT │
│ - 设置 LYCIUM_THIRDPARTY_ROOT │
│ - 设置 OHOS_SDK_VER │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ checktestenv() │
│ - 检查 cmake/make/ctest/perl 是否存在│
│ - 创建日志目录 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ getcpuarchitecture() │
│ - 检测 CPU 架构 │
│ - 设置 ARCH 变量 │
│ (arm64-v8a 或 armeabi-v7a) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ setloaddynamiclibrarypath() │
│ - 设置动态库搜索路径 │
│ - export LD_LIBRARY_PATH │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 查找要测试的库 │
│ - 如果指定库名: findlibsdir() │
│ - 如果未指定: findbuilddir() │
│ - 填充 hpkPaths 数组 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ checkhpk() 函数 │
│ 遍历所有要测试的库 │
└──────────────┬──────────────────────┘
│
▼
┌───────┴───────┐
│ for 循环 │
└───────┬───────┘
│
▼
┌─────────────────────────────────────┐
│ 检查 HPKCHECK 文件是否存在 │
│ if [ ! -f $libdir/HPKCHECK ] │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ cd $libdir │
│ 进入库的源码目录 │
│ (如: thirdparty/AES) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ source ./HPKCHECK │
│ 加载 HPKCHECK 文件 │
│ (关键步骤!) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ HPKCHECK 文件执行内容 │
│ 1. source HPKBUILD │
│ - 导入构建脚本 │
│ - 获取 pkgname, builddir 等变量 │
│ │
│ 2. 设置 logfile 变量 │
│ - 定义测试日志路径 │
│ │
│ 3. 定义 openharmonycheck() 函数 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 检查是否有 checkprepare() 函数 │
│ type -t checkprepare │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 如果存在,执行 checkprepare() │
│ 执行测试前的准备工作 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ openharmonycheck │
│ 调用 HPKCHECK 中定义的测试函数 │
│ - cd ${builddir}/${ARCH}-build │
│ - ctest >> ${logfile} 2>&1 │
│ - 保存测试结果 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 检查测试结果 │
│ - 成功: 加入 successlibs │
│ - 失败: 加入 failedlibs │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 收集测试日志 │
│ - 复制到 LOG_PATH │
│ - 失败的日志复制到 LYCIUM_FAULT_PATH│
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ cd $OLDPWD │
│ 返回原目录 │
└──────────────┬──────────────────────┘
│
▼
┌───────┴───────┐
│ 继续下一个库 │
└───────┬───────┘
│
▼
┌─────────────────────────────────────┐
│ 输出测试报告 │
│ - 总测试库数量 │
│ - 失败的库列表 │
└─────────────────────────────────────┘
3. 关键代码解析
3.1 在 test.sh 中加载 HPKCHECK(行号以你本地 lycium/test.sh 为准)
bash
source ./HPKCHECK
这行代码的作用:
- 使用
source命令加载HPKCHECK文件 source会在当前 Shell 环境中执行文件内容- 这样
HPKCHECK中定义的函数(如openharmonycheck)就可以在当前脚本中调用
3.2 调用测试函数
bash
openharmonycheck > /dev/null 2>&1
这行代码:
- 调用
HPKCHECK中定义的openharmonycheck()函数 - 将输出重定向到
/dev/null(不显示在终端) - 测试结果保存在日志文件中
4. 执行示例
示例1:测试单个库(AES)
bash
cd /path/to/lycium_plusplus/lycium
./test.sh AES
执行过程:
test.sh设置环境变量- 在
LYCIUM_THIRDPARTY_ROOT(即thirdparty)中查找AES库 - 进入
thirdparty/AES目录 source ./HPKCHECK加载测试脚本- 执行
openharmonycheck()函数 - 生成测试日志
- 输出测试结果
示例2:测试多个库
bash
./test.sh AES zlib openssl
示例3:测试所有已编译的库
bash
./test.sh
5. 执行环境要求
根据 test.sh 中的说明,脚本设计为在 OpenHarmony 设备上使用:
重要 :test.sh 必须在 OpenHarmony 设备(或已与交叉产物路径对齐的环境)上运行,因为:
- 需要在真实设备上运行编译出的测试程序
- 测试程序是目标架构二进制,不能在宿主机上直接当本机程序运行
- 需要访问 OpenHarmony 的系统库和资源
6. 执行前提条件
在执行 test.sh 之前,需要:
-
编译三方库:
bashcd /path/to/lycium_plusplus/lycium ./build.sh AES -
部署到设备:
- 将编译产物和测试脚本推送到 OpenHarmony 设备
- 确保设备上有必要的工具(cmake, make, ctest, perl)
-
在设备上执行测试:
bashcd /path/to/lycium ./test.sh AES
7. 总结
HPKCHECK 文件的执行方式:
- ✅ 通过执行
test.sh脚本 - ✅
test.sh使用source命令加载HPKCHECK - ✅ 调用
HPKCHECK中定义的openharmonycheck()函数 - ✅ 须在 OpenHarmony 设备(或等效环境)上运行
执行流程:
test.sh → checkhpk() → source ./HPKCHECK → openharmonycheck() → 生成测试日志