在Linux下使用Termony搭建HNP自验证环境全指南

在 OpenHarmony(鸿蒙)的北向生态建设中,将 Linux 经典命令行工具(如 curl, git, vim, htop 等)移植到鸿蒙系统是一项基础且重要的工作。然而,很多开发者在交叉编译完成后,往往卡在"如何优雅地在设备上验证"这一步。

传统的 hdc shell 调试虽然可用,但环境简陋、缺乏依赖管理。今天,我们将介绍一款神器------Termony (鸿蒙原生终端模拟器),并手把手教你在 Linux 环境下,如何构建一套完整的HNP(Harmony Native Package)自验证环境。即使你是刚入门的开发者,看完这篇也能轻松搞定!

目录

[什么是 Termony 和 HNP?](#什么是 Termony 和 HNP?)

准备工作 (Prerequisites)

[1. 硬件环境](#1. 硬件环境)

[2. 软件环境](#2. 软件环境)

第一步:理解自验证流程架构

[第二步:在 Linux 上准备 HNP 包](#第二步:在 Linux 上准备 HNP 包)

[1. 安装 HNP 打包工具](#1. 安装 HNP 打包工具)

[2. 创建打包目录结构](#2. 创建打包目录结构)

[3. 编写 hnp.json 配置文件](#3. 编写 hnp.json 配置文件)

[4. 放入二进制文件并打包](#4. 放入二进制文件并打包)

[第三步:将 HNP 包集成到设备](#第三步:将 HNP 包集成到设备)

[1. 推送文件](#1. 推送文件)

[2. 确认推送成功](#2. 确认推送成功)

[第四步:在 Termony 中完成装载与验证 (核心步骤)](#第四步:在 Termony 中完成装载与验证 (核心步骤))

[1. 打开 Termony 应用](#1. 打开 Termony 应用)

[2. 初始化环境(如果是首次使用)](#2. 初始化环境(如果是首次使用))

[3. 安装外部 HNP 包](#3. 安装外部 HNP 包)

[4. 刷新环境变量](#4. 刷新环境变量)

第五步:验证运行与调试

进阶调试技巧

总结与建议


什么是 Termony 和 HNP?

在开始实战前,我们先对齐一下概念,防止小白晕车。

  • Termony:你可以把它理解为鸿蒙版的 Termux 或 iTerm2。它是一个运行在 OpenHarmony 设备上的 App,提供了一个完整的终端环境,允许你在手机/平板上运行 Shell 命令。

  • HNP (Harmony Native Package) :这是鸿蒙原生的一种包格式,类似于 Linux 的 .deb.rpm。我们将编译好的二进制文件打包成 HNP,就能通过包管理器在 Termony 中一键安装、卸载和管理依赖。

我们今天的目标:在 Linux PC 上编译打包一个 HNP 工具,将其推送到鸿蒙设备,并在 Termony 中安装运行,完成"开发-部署-验证"的闭环。


准备工作 (Prerequisites)

1. 硬件环境

  • PC 端:运行 Ubuntu 20.04+ 的电脑(或虚拟机/WSL2)。

  • 设备端:一台已解锁的 OpenHarmony 设备(如 RK3568 开发板、Mate60 Pro 纯血鸿蒙版等)。

2. 软件环境

  • PC 端

    • 已配置好 OpenHarmony SDK(含 hdc 工具)。

    • 已安装 hnp-cli 打包工具(下文会讲如何获取)。

  • 设备端

    • 已安装 Termony 应用(HAP包)。

博主提示 :确保你的 hdc list targets 能识别到设备,这是所有操作的基础。


第一步:理解自验证流程架构

在动手之前,看一张流程图:


第二步:在 Linux 上准备 HNP 包

假设我们要移植一个简单的工具,比如 hello-world 或者以 fastfetch 为例。为了演示方便,我们假设你已经通过交叉编译得到了一个名为 helloworld 的二进制文件。

1. 安装 HNP 打包工具

如果你的 Linux 环境还没有 hnp 打包工具,通常可以通过 npm 或者下载官方发布的二进制工具链。

bash 复制代码
# 假设我们使用 npm 安装 hnp 命令行工具(示例)
npm install -g @openharmony/hnp

2. 创建打包目录结构

HNP 包有严格的目录规范,我们需要手动创建(或使用脚本生成)。

bash 复制代码
mkdir -p ~/hnp_build/helloworld
cd ~/hnp_build/helloworld

# 创建标准目录结构
mkdir -p bin lib share/doc

3. 编写 hnp.json 配置文件

在根目录下创建一个 hnp.json,这是包的"身份证"。

javascript 复制代码
{
  "name": "helloworld",
  "version": "1.0.0",
  "description": "My first HNP package for Termony",
  "install": {
    "bin": [
      "bin/helloworld"
    ]
  },
  "dependencies": {}
}

4. 放入二进制文件并打包

将你交叉编译好的鸿蒙版二进制文件复制进去。

bash 复制代码
# 将你的编译产物复制到 bin 目录
cp /path/to/your/compiled/helloworld ./bin/

# 赋予执行权限
chmod +x bin/helloworld

# 执行打包命令
hnp pack .

执行完毕后,你会得到一个 helloworld-1.0.0.hnp 文件。这就是我们要集成的"外部包"。


第三步:将 HNP 包集成到设备

这一步是将 PC 上的"子弹"输送到鸿蒙设备的"战场"。

1. 推送文件

使用 hdc 工具将生成的 .hnp 包推送到设备的临时目录。推荐使用 /data/local/tmp,因为这里通常有读写权限。

bash 复制代码
# 在 PC 终端执行
hdc file send ./helloworld-1.0.0.hnp /data/local/tmp/

2. 确认推送成功

bash 复制代码
hdc shell ls -l /data/local/tmp/helloworld-1.0.0.hnp
# 如果看到文件信息,说明推送成功

第四步:在 Termony 中完成装载与验证 (核心步骤)

现在拿起你的鸿蒙设备,或者使用 Scrcpy 投屏。

1. 打开 Termony 应用

启动应用,你应该能看到一个熟悉的黑色终端界面。

2. 初始化环境(如果是首次使用)

Termony 通常自带基础的 HNP 管理器。在 Termony 的命令行输入:

bash 复制代码
hnp --version

如果能看到版本号,说明环境正常。

3. 安装外部 HNP 包

这是最关键的一步。我们需要告诉 Termony 去安装我们刚刚推进去的那个包。

在 Termony 的界面中输入以下命令:

bash 复制代码
# 1. 切换到临时目录(可选,或者直接指定绝对路径)
cd /data/local/tmp

# 2. 执行安装命令
# 注意:根据 Termony 版本的不同,命令可能是 hnp install 或者 termony install
hnp install ./helloworld-1.0.0.hnp

此时终端会输出类似日志:

  • Verifying package integrity... OK

  • Extracting to /data/storage/el2/base/files/usr/ ... OK

  • Linking binaries... OK

  • Package 'helloworld' installed successfully!

4. 刷新环境变量

有些时候安装后需要刷新一下路径才能识别新命令(类似 Linux 的 source)。

bash 复制代码
source /etc/profile
# 或者重启 Termony App

第五步:验证运行与调试

现在是见证奇迹的时刻。直接在 Termony 中输入你的命令:

bash 复制代码
helloworld

预期输出:

bash 复制代码
Hello OpenHarmony!
This is running inside Termony.

进阶调试技巧

如果在运行时报错(比如 No such file or directoryPermission denied),请按以下步骤排查:

  1. 检查依赖库:

    如果你的工具依赖 libc++.so 或其他动态库,使用 ldd helloworld (如果 Termony 里有 ldd) 或者直接看报错信息。

    解决方法:将依赖库打包进 HNP 的 lib 目录,或者设置 LD_LIBRARY_PATH。

    bash 复制代码
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/libs
  2. 检查架构:

    确保你编译的是 aarch64 (ARM64) 架构。如果在 PC 上编译成了 x86,在手机上是跑不起来的。

    验证命令:file /bin/helloworld(查看 ELF 头信息)。

  3. 日志追踪:

    如果程序闪退,可以结合 hilog 查看系统级报错。

    bash 复制代码
    # 在 PC 另开一个终端
    hdc hilog | grep "helloworld"

总结与建议

通过以上五个步骤,我们成功在 Linux 下利用 Termony + HNP 搭建了一套高效的命令行自验证环境。

这就好比给你的鸿蒙设备装了一个"Linux子系统",你可以:

  1. 脱离 PC 验证:在地铁上、咖啡厅里,掏出手机就能测试你写的 C++ 代码。

  2. 构建私有仓库:搭建一个 HTTP服务器,让 Termony 像 apt-get 一样远程下载你自己编译的工具集。

相关推荐
微露清风3 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
xiaoqi9223 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
不会代码的小猴4 小时前
Linux环境编程第六天笔记--system-V IPC
linux·笔记
jin1233224 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
阳光九叶草LXGZXJ4 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
诸神缄默不语4 小时前
Linux命令行教程
linux
烬头88215 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
i建模6 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
kida_yuan7 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
@syh.7 小时前
【linux】进程控制
linux