news 2026/3/4 15:57:01

学习笔记【Day 12】Open Harmony PC应用上tree工具编译成HNP的移植过程调试及测试的问题集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记【Day 12】Open Harmony PC应用上tree工具编译成HNP的移植过程调试及测试的问题集

缘起

Open Harmony 的tree工具调试时,需要确保生成的HNP能在目标设备上正常运行。在测试过程中,常常碰到构建系统与编译出错和库依赖报错、安装运行出错,这3个场景的问题该如何解决?

一、调试问题及应对参考

1.构建系统与编译错误的调试

如果项目使用Cargo(如Rust版本的tre),需确认并修改构建脚本,避免错误地调用make命令,转而使用以下两条命令:

cargo build --target和aarch64-unknown-linux-musl进行交叉编译。

对于C语言项目,则需仔细编写BUILD文件。调试时需关注编译器的警告和错误信息,例如遇到“implicit declaration of function”警告时,表明代码调用了未声明的函数,这需要查阅OpenHarmony的API文档,使用系统提供的等效函数(如ohos_getpwuid)进行替换。

  1. 解决库依赖与链接器问题是常见的调试难点

对于Rust项目,遇到链接器选项不兼容的问题,如LLD链接器不支持--as-needed参数。调试方法是检查详细的构建日志,并创建链接器包装脚本,在脚本中过滤掉不支持的参数后再调用真正的链接器。

  1. 安装与运行时问题的调试同样重要。

即使编译成功,打包成HNP安装后也可能出现执行权限错误(如文件权限被重置为644)。解决此类问题需要遵循鸿蒙的包管理规范,仔细检查package.json中ohos.dist.bin的配置路径,并确保deviceType字段与目标设备完全匹配。充分利用OpenHarmony开发者社区和论坛搜索类似问题的解决方案,是攻克此类“拦路虎”的有效途径。

二、 测试用例

我们用一个SD WAN场景中“终端-网络”协同代码来示例

  1. 定义数据模型

该模型应包含设备标识、应用标签、实时网络度量(延迟、丢包、抖动)以及链路质量事件等字段。上报通道可以复用成熟的物联网协议,如MQTT over TLS,这不仅能解决通信问题,其固有的订阅/发布模式也便于控制器灵活接收不同终端的消息。

  1. 编写原子Model示例代码

//models/RouterInitModel.py from hypium.perf.base.perf_base_model import PerfBaseModelfrom hypium.advance.deveco_testing.step

//用于标记步骤[8](@ref)

class RouterInitModel(PerfBaseModel):

//原子用例:模拟并监控智能路由协议初始化过程。

def __init__(self, driver, case_id, init_timeout=10):

super().__init__(driver, case_id)

self.init_timeout = init_timeout

@Step(“启动智能路由协议栈初始化”)

//用Step装饰器标记测试步骤[8](@ref)

def execute(self):

self.log.info(“开始执行路由协议初始化原子用例”)

trigger_command = ‘am start -n com.example.routerdaemon/.InitActivity’

self.driver.execute_shell_command(trigger_command)

//等待初始化完成,监控日志或特定文件

self.log.info(“等待路由协议初始化完成,超时设置为%ds” % self.init_timeout)

//这里可以添加轮询逻辑,检查代表初始化完成的标志

//示例:检查系统日志中是否出现初始化成功的关键字

log_cmd = “logcat -d | grep -i ‘router.*init.*complete’ | tail -1”

result = self.driver.execute_shell_command(log_cmd, timeout=self.init_timeout)

if result and “success” in result.lower():

self.log.info(“路由协议初始化成功”)

//可以在此处上报自定义性能指标,如初始化耗时[8](@ref)

self.report_metric(“RouterInitDuration”, 1.5, “s”)

else:

self.log.error(“路由协议初始化失败或超时”)

//标记步骤失败

raise AssertionError(“Router initialization failed.”)

三、测试步骤过程

1. 在PyCharm中编写并调试通过上述脚本后,即可将其工程目录路径配置到DevEco Testing客户端,创建性能测试任务并执行,以验证智能路由协议初始化的功能正确性与性能表现。

2.云端任务执行与报告分析完成闭环调试。本地脚本验证通过后,在DevEco Testing客户端创建“tree工具智能路由协议测试”任务,选择已调试好的脚本路径。任务执行后,工具会自动采集每一步操作的性能数据(如帧率、时延)并生成详细报告。

3. 通过报告中的步骤级指标和可下载的trace文件、视频,您可以精准定位到具体操作步骤的性能瓶颈,从而进行针对性优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 17:28:21

39_Spring AI 干货笔记之 Ollama 嵌入

一、Ollama 嵌入 使用 Ollama,您可以在本地运行各种 AI 模型 并从中生成嵌入。嵌入是一个浮点数向量(列表)。两个向量之间的距离衡量它们的相关性。距离小表示相关性高,距离大表示相关性低。 OllamaEmbeddingModel 实现利用了 O…

作者头像 李华
网站建设 2026/3/3 15:31:30

终极指南:解锁Quansheng对讲机隐藏功能的完整方案

终极指南:解锁Quansheng对讲机隐藏功能的完整方案 【免费下载链接】uv-k5-firmware-custom This is a fork of Egzumer https://github.com/egzumer/uv-k5-firmware-custom 项目地址: https://gitcode.com/gh_mirrors/uvk/uv-k5-firmware-custom 还在为对讲机…

作者头像 李华
网站建设 2026/3/3 15:31:30

AI大模型之Agent,RAG,LangChain(二)

这一期我来详细分析一下RAG的基础理论知识.RAG作为LLM重要的一种思想,在工作中的应用是相当广泛的.一.为什么使用RAG1.传统LLM在传统LLM中,有四个重要的缺陷有待解决.LLM的数据不是实时的.在这里我举个例子,比如说,不使用LLM工具,直接询问当下热点事件,大模型会回答你他不知道,…

作者头像 李华
网站建设 2026/3/3 14:11:28

CLI形态的智能编程

CLI形态的智能编程,是指把AI编程能力做成“命令行工具(Command-Line Interface)”,让开发者在终端里直接敲自然语言指令,就能完成写代码、改Bug、跑测试、部署等任务,而不必打开图形界面或IDE。它的核心特点…

作者头像 李华
网站建设 2026/3/2 20:48:59

说说Redis的单线程架构

回答框架建议 一句话概括核心:先给出精准的定义,纠正常见误解。详细阐述“单线程”的含义:具体是哪里单线程。深入分析为什么采用单线程还能如此高效:这是回答的精华部分。客观讨论单线程模型的优缺点:体现你的辩证思考…

作者头像 李华
网站建设 2026/3/2 7:06:33

MSF的基础使用

以两个windows主机层面的漏洞,简单演示一下msf框架的使用。 MS08-067 简介 影响范围:MS08-067漏洞会影响Windows 2000/XP/Server 2003/Vista/Server 2008的各个版本,甚至还包括测试阶段的Windows 7 Pro-Beta。 漏洞产生的原因及攻击效果&…

作者头像 李华