在开源鸿蒙(OpenHarmony)生态建设中,C/C++三方库的适配与验证是开发者常遇到的技术挑战。当使用lycium工具完成交叉编译后,如何高效验证这些库在鸿蒙设备上的功能完整性,成为确保项目质量的关键环节。
不同于常规Linux环境下的测试流程,鸿蒙设备上的验证工作面临几个特殊挑战:
针对鸿蒙设备的测试验证,需要准备专门的工具链包。这个工具包包含以下核心组件:
code复制lycium-citools/
├── arm64-v8a-busybox.tar.gz # aarch64架构的busybox工具集
├── arm64-v8a-cmake_make.tar.gz # cmake和make工具链
├── arm64-v8a-perl.tar.gz # perl解释器环境
├── arm64-v8a-shell_cmd.tar.gz # 补充shell命令工具
├── armeabi-v7a-busybox.tar.gz # armv7架构的busybox
├── armeabi-v7a-cmake_make.tar.gz # armv7的cmake/make
├── armeabi-v7a-perl.tar.gz # armv7的perl环境
├── armeabi-v7a-shell_cmd.tar.gz # armv7的shell工具
├── setCIenv.sh # 环境自动配置脚本
└── SHA512SUM # 文件校验信息
获取方式:
bash复制cd /data
mkdir tools && cd tools
git clone https://gitee.com/han_jin_fei/lycium-citools.git
注意事项:
- perl工具包必须解压到设备的/data目录且不能移动位置
- 不同架构设备必须使用对应版本的工具包
- 建议通过sha512sum校验文件完整性
使用hdc工具进行部署的完整流程:
bash复制cd ~/OpenHarmony/tools
tar -zcvf lycium-citools.tar.gz lycium-citools
bash复制# 编辑.zshrc添加以下内容
export PATH=/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains:$PATH
HDC_SERVER_PORT=7035
launchctl setenv HDC_SERVER_PORT $HDC_SERVER_PORT
export HDC_SERVER_PORT
bash复制hdc file send lycium-citools.tar.gz /data
hdc shell
cd /data
tar -zxvf lycium-citools.tar.gz
bash复制cd lycium-citools
sh setCIenv.sh
环境验证:
bash复制# 检查关键工具是否可用
which cmake
which make
which perl
# 若报错"not found",需手动添加PATH
export PATH=/usr/CIusr/bin:$PATH
lycium框架提供的HPKCHECK模板包含三个核心部分:
bash复制# 基础配置区
source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log
# 测试准备函数(可选)
checkprepare(){
return 0
}
# 核心测试函数
openharmonycheck() {
res=0
cd ${builddir}/${ARCH}-build
ctest > ${logfile} 2>&1 # 实际测试命令
res=$?
cd $OLDPWD
return $res
}
bash复制openharmonycheck() {
res=0
cd $builddir/$ARCH-build
echo "start test times: `date`" >> ${logfile} 2>&1
ctest --timeout 40000 >> ${logfile} 2>&1
res=$?
if [ $res -ne 0 ]; then
mkdir -p ${LYCIUM_FAULT_PATH}/${pkgname}
cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/
fi
echo "end test times: `date`" >> ${logfile} 2>&1
return $res
}
bash复制openharmonycheck() {
cd $builddir-$ARCH-build
make check > ${logfile} 2>&1
res=$?
cd $OLDPWD
return $res
}
bash复制openharmonycheck() {
res=0
cd ${builddir}/${ARCH}-build
./test_uuid > ${logfile} 2>&1
res=$?
cd $OLDPWD
return $res
}
适用场景:开发环境与测试设备路径完全一致
操作流程:
bash复制tar -zcvf tpc_c_cplusplus.tar.gz tpc_c_cplusplus
bash复制hdc file send tpc_c_cplusplus.tar.gz /data
hdc shell
cd /data
tar -zxvf tpc_c_cplusplus.tar.gz
bash复制cd /data/tpc_c_cplusplus/lycium
bash ./test.sh cJSON libuuid # 测试指定库
# 或
bash ./test.sh # 测试所有已编译库
适用场景:仅需验证单个库的功能
操作流程:
bash复制cd tpc_c_cplusplus/thirdparty
tar -zcvf cJSON-1.7.19.tar.gz cJSON-1.7.19
bash复制hdc file send cJSON-1.7.19.tar.gz /data
hdc shell
cd /data
tar -zxvf cJSON-1.7.19.tar.gz
bash复制cd cJSON-1.7.19/armeabi-v7a-build
export PATH=/usr/CIusr/bin:$PATH
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
ctest --output-on-failure
现象:
code复制Test #1: cJSON_test .......***Failed
解决方案:
bash复制export LD_LIBRARY_PATH=/path/to/so:$LD_LIBRARY_PATH
现象:
code复制/bin/sh: ctest: not found
解决方案:
bash复制export PATH=/usr/CIusr/bin:$PATH
现象:
code复制Test timeout exceeded
解决方案:
bash复制# 在HPKCHECK中增加超时参数
ctest --timeout 60000
路径一致性原则
/data/workspace这类固定路径环境隔离方案
bash复制# 创建独立测试环境
mkdir -p /data/testenv
cp -r lycium-citools /data/testenv/
日志增强技巧
bash复制# 在HPKCHECK中添加详细日志
echo "CPU Info:" >> $logfile
cat /proc/cpuinfo >> $logfile
echo "Memory Info:" >> $logfile
cat /proc/meminfo >> $logfile
性能优化参数
bash复制# 针对大型测试集的优化
ctest --parallel 4 --output-on-failure --timeout 300
自动化集成建议
bash复制# 示例CI脚本片段
hdc file send ${TEST_PKG} /data
hdc shell "cd /data && tar -zxvf ${TEST_PKG}.tar.gz"
hdc shell "cd /data/${TEST_PKG} && sh run_tests.sh"
hdc file recv /data/test_logs ./logs
在实际鸿蒙设备验证过程中,我发现保持测试环境纯净非常重要。建议每次测试前重启设备,避免残留环境变量影响测试结果。对于需要频繁测试的场景,可以制作设备环境快照,大幅提升测试效率。