鸿蒙三方库适配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() → 生成测试日志
相关推荐
liulian09167 小时前
Flutter for OpenHarmony 跨平台开发:BMI计算器功能实战指南
flutter·华为
xmdy586610 小时前
Flutter+开源鸿蒙实战|智安盾电商溯源平台Day1 项目搭建与整体方案拆解
flutter·开源·harmonyos
nashane11 小时前
HarmonyOS 6学习:应用签名文件丢失处理与更新完全指南
学习·华为·harmonyos·harmonyos 5
笔触狂放12 小时前
【项目】基于ArkTS的老年人智能应用开发(1)
harmonyos·arkts·鸿蒙
24白菜头14 小时前
【无标题】
c++·笔记·学习·harmonyos
LeesonWong15 小时前
Neo 构建鸿蒙应用【二】:技术路线全解
harmonyos
LeesonWong15 小时前
Neo 构建鸿蒙应用【三】:实战社交应用与工程感悟
harmonyos
xmdy586616 小时前
Flutter+开源鸿蒙实战|智联邻里Day6 引入GetX全局架构+升级版下拉刷新+Toast弹窗+网络状态监听
flutter·开源·harmonyos
斯班奇的好朋友阿法法17 小时前
鸿蒙 vs iOS vs 微信小程序:开发平台全面对比
ios·微信小程序·harmonyos
xmdy586617 小时前
Flutter+开源鸿蒙实战|智联邻里Day5 闲置详情页+删除功能+下拉刷新+交互优化
flutter·开源·harmonyos