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

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

目录

什么是 Termony 和 HNP?

准备工作 (Prerequisites)

1. 硬件环境

2. 软件环境

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

第二步:在 Linux 上准备 HNP 包

1. 安装 HNP 打包工具

2. 创建打包目录结构

3. 编写 hnp.json 配置文件

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

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

1. 推送文件

2. 确认推送成功

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

1. 打开 Termony 应用

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

3. 安装外部 HNP 包

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 能识别到设备,这是所有操作的基础。


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

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

graph LR     A[Linux PC: 源码/二进制] -->|打包| B(HNP 软件包 .hnp)     B -->|hdc file send| C[鸿蒙设备: /data/local/tmp]     C -->|Termony内安装| D{Termony 环境}     D -->|执行验证| E[运行结果]


第二步:在 Linux 上准备 HNP 包

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

1. 安装 HNP 打包工具

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

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

2. 创建打包目录结构

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

mkdir -p ~/hnp_build/helloworld
cd ~/hnp_build/helloworld

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

3. 编写 hnp.json 配置文件

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

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

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

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

# 将你的编译产物复制到 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,因为这里通常有读写权限。

# 在 PC 终端执行
hdc file send ./helloworld-1.0.0.hnp /data/local/tmp/

2. 确认推送成功

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

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

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

1. 打开 Termony 应用

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

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

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

hnp --version

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

3. 安装外部 HNP 包

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

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

# 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)。

source /etc/profile
# 或者重启 Termony App

第五步:验证运行与调试

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

helloworld

预期输出:

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。

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/libs
    
  2. 检查架构:

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

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

  3. 日志追踪:

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

    # 在 PC 另开一个终端
    hdc hilog | grep "helloworld"
    

总结与建议

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

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

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

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

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐