news 2026/5/1 4:35:31

开源鸿蒙终端工具Termony中添加自定义命令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开源鸿蒙终端工具Termony中添加自定义命令

Termony中添加hello命令

    • 环境准备
    • 理解编译结构
    • 添加自定义命令工具(以hello为例)
      • hello.c
      • Makefile
      • 编译
    • 安装到模拟器
    • 运行
    • 注意

Termony作为鸿蒙终端工具环境,集成了很多移植过来的命令行工具。这些工具大多源自 Linux 生态,经过适配后可在鸿蒙上运行。那么,这些工具是如何编译的?又是否可以添加一个自定义的命令行工具呢?下面介绍一种可行的添加方法——虽然该方法未必完全符合规范,但可作为一种思路供参考。

环境准备

首先,需在 Ubuntu 系统中搭建Termony的编译环境。具体搭建步骤可参考:
开源鸿蒙终端工具Termony编译-WSL版

理解编译结构

要在Termony项目中添加自定义工具,需先熟悉其整体编译流程。

build_termony(){if[[!-f arkui-x/licenses/LICENSE.sha256]];thenprepare_arkuixfibuild_termony_hnps build_termony_hap}

如上,在 Linux 平台上,Termony使用build-linux.sh脚本进行构建。build_termony是编译的主函数,该功能主要包含三个阶段:

  1. 准备arkuix(可暂不关注)
  2. 编译并生成 HNP(HarmonyOS Native Package)
  3. 打包生成 HAP(HarmonyOS Ability Package),通过hvigorw工具将 HNP 内容打包进 HAP 中
    build_termony_hap内容如下:
build_termony_hap(){hvigorw assembleHap# add hnp, and sign manuallypushd${PROJ_BASE_HOME}/entryzip-r../entry/build/default/outputs/default/entry-default-unsigned.hap hnppopd}

其中,HNP 的编译是核心环节。各命令行工具(如treels等)的源码位于build-hnp目录下的对应子目录中,每个工具都有独立的构建脚本(通常是Makefile)。

build_termony_hnps(){cd${PROJ_BASE_HOME}&&make-C build-hnp}

tree工具为例,其Makefile通常执行以下步骤:

  • 下载并解压源码包
  • 使用鸿蒙交叉编译工具链进行编译
  • 将生成的可执行文件安装到本地临时构建目录
  • 将该可执行文件拷贝至统一的sysroot目录,供后续 HAP 打包使用
  • 同时生成文件清单(如file.lst),记录该工具涉及的文件路径,供打包流程引用
$catbuild-hnp/tree/Makefile include../utils/Makefrag all: download/2.2.1.tar.gzrm-rf temp buildmkdir-p temp buildcdtemp&&tarxvf../download/2.2.1.tar.gzcdtemp/tree-2.2.1&&makeCC=$(OHOS_SDK_HOME)/native/llvm/bin/$(OHOS_ARCH)-unknown-linux-ohos-clangCFLAGS="-O3 -static -std=c11 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DLINUX"LDFLAGS="-static"cdtemp/tree-2.2.1&&makeinstall-j$(shell nproc)MANDIR=$(shellpwd)/build/share/manDESTDIR=$(shellpwd)/build/binmkdir-p../sysrootcp-rv ./build/.../sysroot|teefile.lst download/2.2.1.tar.gz:mkdir-p downloadcddownload&&$(WGET)https://github.com/Old-Man-Programmer/tree/archive/refs/tags/2.2.1.tar.gz

添加自定义命令工具(以hello为例)

参考上述tree的构建方式,我们可以为自定义程序(hello)编写类似的Makefile,实现以下简化流程:

  • 生成hello.c源码
  • 将生成的hello可执行文件安装到本地构建目录
    完成后,重新运行build-linux.sh,该自定义工具便会随 HNP 一起被打包进最终的 HAP,从而集成到Termony环境中。

hello.c

#include <stdio.h> int main() { printf("Hello HarmonyOS from WSL Ubuntu 22.04!\n"); return 0; }

Makefile

$ cat Makefile include ../utils/Makefrag TARGET := hello SRCS := hello.c .PHONY: all clean all: $(TARGET) cp -rf hello ../sysroot/bin/ $(TARGET): $(SRCS) $(CC) $(CFLAGS) $< -o $@ clean: rm -f $(TARGET)

编译

$ ./build-linux.sh -b

注意,编译脚本在make时,会首先判断命令行工具目录下是否有.stamp文件,如果存在,则认为已经编译过,不会再编译该目录。

安装到模拟器

E:\>hdc appinstallentry-default-unsigned.hap[Info]Appinstallpath:E:\entry-default-unsigned.hap msg:install bundle successfully. AppMod finish

运行

注意

  1. 以上方法仅做实验调试,目录结构也并未完全遵守编译规则;
  2. 确保Termony原工程能编译成功,再来添加测试自定义工具,不然很难定位问题所在。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 16:07:02

UDP 协议详解与 Qt 实战应用

引言&#xff1a; https://github.com/0voice UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是 TCP/IP 协议簇中传输层的核心协议之一&#xff0c;与 TCP 协议共同承担着端到端的数据传输任务。相较于 TCP 的面向连接、可靠传输特性&#xf…

作者头像 李华
网站建设 2026/4/28 8:44:26

为什么你的MAUI应用上线就崩溃?99%开发者忽略的测试盲区曝光

第一章&#xff1a;为什么你的MAUI应用上线就崩溃&#xff1f;99%开发者忽略的测试盲区曝光 在.NET MAUI开发中&#xff0c;许多开发者发现应用在本地调试时运行正常&#xff0c;但一旦发布到生产环境便频繁崩溃。问题根源往往隐藏在被忽视的测试盲区中——尤其是平台特定行为、…

作者头像 李华
网站建设 2026/4/24 8:08:45

Unity学习 2Dadventure 4

一 UI - 创建人物状态栏创建canvas切换自己创建的控制器切换比例通过Alt控制位置裁切ui设置 自动裁切并手动处理&#xff0c;然后再为需要的命名设置为固定比例&#xff0c;修改大小和位置复制一份并且注意层级&#xff0c;调整大小&#xff0c;修改填充设置这里就是一些个性化…

作者头像 李华
网站建设 2026/4/17 12:30:44

9、计算机数字表示、架构与内存管理知识详解

计算机数字表示、架构与内存管理知识详解 1. 二进制与数字表示 在计算机领域,数字的表示方式多种多样。二进制是计算机最基础的表示形式,例如二进制数 110110 对应的十进制数是 54。 1.1 二进制算术 二进制加法是二进制算术的基本操作,用于两个二进制数相加。 1.2 数字…

作者头像 李华
网站建设 2026/5/1 9:37:15

PHP安全审计实战:从0到1构建医疗数据防护体系(含真实案例)

第一章&#xff1a;医疗数据安全面临的挑战与PHP审计必要性 在数字化转型加速的背景下&#xff0c;医疗行业越来越多地依赖基于Web的信息系统来管理患者记录、诊断结果和治疗方案。这些系统中&#xff0c;PHP作为广泛应用的服务器端脚本语言&#xff0c;常用于构建医院管理平台…

作者头像 李华
网站建设 2026/4/18 9:07:32

扩展QDK有多难?3个关键接口让你快速上手

第一章&#xff1a;扩展QDK有多难&#xff1f;从认知到实践的跨越量子开发工具包&#xff08;Quantum Development Kit, QDK&#xff09;由微软提供&#xff0c;旨在简化量子算法的开发与仿真。尽管其抽象层次较高&#xff0c;但要真正扩展QDK以支持自定义量子操作或集成新后端…

作者头像 李华