鸿蒙三方库适配HPKCHECK 文件执行流程详解

鸿蒙三方库适配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

执行过程:

  1. test.sh 设置环境变量
  2. LYCIUM_THIRDPARTY_ROOT(即 thirdparty)中查找 AES
  3. 进入 thirdparty/AES 目录
  4. source ./HPKCHECK 加载测试脚本
  5. 执行 openharmonycheck() 函数
  6. 生成测试日志
  7. 输出测试结果
示例2:测试多个库
bash 复制代码
./test.sh AES zlib openssl
示例3:测试所有已编译的库
bash 复制代码
./test.sh

5. 执行环境要求

根据 test.sh 中的说明,脚本设计为在 OpenHarmony 设备上使用:

重要test.sh 必须在 OpenHarmony 设备(或已与交叉产物路径对齐的环境)上运行,因为:

  1. 需要在真实设备上运行编译出的测试程序
  2. 测试程序是目标架构二进制,不能在宿主机上直接当本机程序运行
  3. 需要访问 OpenHarmony 的系统库和资源

6. 执行前提条件

在执行 test.sh 之前,需要:

  1. 编译三方库

    bash 复制代码
    cd /path/to/lycium_plusplus/lycium
    ./build.sh AES
  2. 部署到设备

    • 将编译产物和测试脚本推送到 OpenHarmony 设备
    • 确保设备上有必要的工具(cmake, make, ctest, perl)
  3. 在设备上执行测试

    bash 复制代码
    cd /path/to/lycium
    ./test.sh AES

7. 总结

HPKCHECK 文件的执行方式

  • ✅ 通过执行 test.sh 脚本
  • test.sh 使用 source 命令加载 HPKCHECK
  • ✅ 调用 HPKCHECK 中定义的 openharmonycheck() 函数
  • ✅ 须在 OpenHarmony 设备(或等效环境)上运行

执行流程

复制代码
test.sh → checkhpk() → source ./HPKCHECK → openharmonycheck() → 生成测试日志
相关推荐
见山是山-见水是水6 小时前
Flutter 框架跨平台鸿蒙开发 - 电子发票智能管理
flutter·华为·harmonyos
HarmonyOS_SDK6 小时前
化繁为简:顺丰速运App如何通过 HarmonyOS SDK实现专业级空间测量
harmonyos
不爱吃糖的程序媛7 小时前
鸿蒙三方库适配读懂 `HPKBUILD`:lycium 怎么知道「下载谁、怎么编、装到哪」?
服务器·华为·harmonyos
李游Leo7 小时前
别让压图拖垮首帧:系统 Picker + TaskPool + ImagePacker,把 HarmonyOS 图片整理链路做顺
harmonyos
2401_839633917 小时前
鸿蒙flutter第三方库适配 - 存储空间分析
flutter·华为·harmonyos
加农炮手Jinx7 小时前
Flutter 三方库 better_commit 的鸿蒙化适配指南 - 实现具备语义化提交规范与自动化交互的 Git 工作流插件、支持端侧版本工程的高效规范化审计实战
flutter·harmonyos·鸿蒙·openharmony·better_commit
麒麟ZHAO8 小时前
鸿蒙flutter第三方库适配 - 文件搜索工具
flutter·华为·harmonyos
云和数据.ChenGuang8 小时前
鸿蒙6的**星盾安全(StarShield)技术
安全·华为·harmonyos
2401_839633918 小时前
鸿蒙flutter第三方库适配 - 二维表格
flutter·华为·harmonyos