当前位置: 首页 > news >正文

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

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

欢迎大家加入开源鸿蒙跨平台开发者社区

HPKCHECK文件是通过执行test.sh脚本来运行的。现在解释整个执行流程:

1. 执行入口

cd/path/to/lycium_plusplus/lycium ./test.sh[库名1][库名2]...

或者测试所有库:

./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为准)
source./HPKCHECK

这行代码的作用:

  • 使用source命令加载HPKCHECK文件
  • source会在当前 Shell 环境中执行文件内容
  • 这样HPKCHECK中定义的函数(如openharmonycheck)就可以在当前脚本中调用
3.2 调用测试函数
openharmonycheck>/dev/null2>&1

这行代码:

  • 调用HPKCHECK中定义的openharmonycheck()函数
  • 将输出重定向到/dev/null(不显示在终端)
  • 测试结果保存在日志文件中

4. 执行示例

示例1:测试单个库(AES)
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:测试多个库
./test.sh AES zlib openssl
示例3:测试所有已编译的库
./test.sh

5. 执行环境要求

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

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

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

6. 执行前提条件

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

  1. 编译三方库

    cd/path/to/lycium_plusplus/lycium ./build.sh AES
  2. 部署到设备

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

    cd/path/to/lycium ./test.sh AES

7. 总结

HPKCHECK 文件的执行方式

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

执行流程

test.sh → checkhpk() → source ./HPKCHECK → openharmonycheck() → 生成测试日志
http://www.jsqmd.com/news/634395/

相关文章:

  • APK Installer:Windows原生环境下的安卓应用部署架构与技术实现
  • WVP-PRO流媒体服务器实战:如何优雅地自动清理无人观看的国标/代理流?
  • 脆性器件简介
  • AntiMicroX游戏手柄映射终极手册:让PC游戏完美适配你的手柄
  • 深度学习基于YOLOV11罂粟识别检测系统 YOLOV11框架如何训练无人机罂粟识别检测数据集 航拍罂粟数据集的训练及应用
  • 从零开始:在Autodl云服务器上搭建Neo4j知识图谱数据库的完整指南
  • 玩客云刷机实战:从零打造Armbian轻量级服务器(超详细图文指南)
  • Solaar实战指南:Linux下Logitech设备高效管理全攻略
  • Jenkins Api Token生成(记录篇)
  • 别让日志变成泄密通道,聊透 SAP Enterprise Search 里的 Logs 和 Traces 安全治理
  • Notepad--:基于Qt与Scintilla架构的跨平台文本编辑器深度解析与性能优化实践
  • 告别复杂命令:这款图形化工具让你3步搞定macOS安装包下载
  • 编程实战:苹果与虫子的数学博弈——从基础条件判断到算法优化
  • PlotJuggler频域分析实战秘籍:从振动信号到频谱洞察
  • 党政小程序开发公司怎么选?北京定制化解决方案优选(附带联系方式) - 品牌2025
  • 终极指南:如何用Deskreen免费将任何设备变成第二屏幕提升工作效率
  • 从“与非门”到CPU:聊聊TTL和CMOS芯片如何塑造了我们的电脑与手机
  • 阶段零:监督学习、无监督学习、强化学习
  • 消息队列--RocketMQ 架构设计与优化
  • Qt Creator + OpenCV 4.x 处理大图不崩溃?手把手教你从32位迁移到64位环境(附MinGW-w64编译避坑指南)
  • 中石化加油卡回收2026新价格,回收注意以下几点 - 猎卡回收公众号
  • HTML到DOCX转换技术深度解析:企业级文档生成解决方案
  • 从像素到点云:线激光三维重建的完整技术链路解析
  • 手把手教你用Verilog实现SLVS-EC接口接收器(附完整代码解析)
  • 如何轻松下载macOS完整安装包:Download Full Installer终极指南
  • 终极指南:如何一键解锁联想拯救者Insyde BIOS隐藏设置
  • 专业无线安全分析:Universal Radio Hacker完全实战指南
  • 2026物业小程序开发公司推荐,麦冬科技定制化服务深度解析(附带联系方式) - 品牌2025
  • 5步构建高效无线充电系统:从零到竞赛级的完整指南
  • 阶段零:AI四大核心应用场景