开源鸿蒙终端工具Termony中添加自定义命令
本文介绍了在鸿蒙终端工具Termony中添加自定义命令行工具的方法。通过分析Termony的编译流程,特别是HNP的构建机制,以添加"hello"命令为例,展示了从源码编写、Makefile配置到最终打包部署的全过程。
·
Termony作为鸿蒙终端工具环境,集成了很多移植过来的命令行工具。这些工具大多源自 Linux 生态,经过适配后可在鸿蒙上运行。那么,这些工具是如何编译的?又是否可以添加一个自定义的命令行工具呢?下面介绍一种可行的添加方法——虽然该方法未必完全符合规范,但可作为一种思路供参考。
环境准备
首先,需在 Ubuntu 系统中搭建 Termony 的编译环境。具体搭建步骤可参考:
开源鸿蒙终端工具Termony编译-WSL版
理解编译结构
要在 Termony 项目中添加自定义工具,需先熟悉其整体编译流程。
build_termony() {
if [[ ! -f arkui-x/licenses/LICENSE.sha256 ]]; then
prepare_arkuix
fi
build_termony_hnps
build_termony_hap
}
如上,在 Linux 平台上,Termony 使用 build-linux.sh 脚本进行构建。build_termony是编译的主函数,该功能主要包含三个阶段:
- 准备
arkuix(可暂不关注) - 编译并生成 HNP(HarmonyOS Native Package)
- 打包生成 HAP(HarmonyOS Ability Package),通过
hvigorw工具将 HNP 内容打包进 HAP 中build_termony_hap内容如下:
build_termony_hap() {
hvigorw assembleHap
# add hnp, and sign manually
pushd ${PROJ_BASE_HOME}/entry
zip -r ../entry/build/default/outputs/default/entry-default-unsigned.hap hnp
popd
}
其中,HNP 的编译是核心环节。各命令行工具(如 tree、ls 等)的源码位于 build-hnp 目录下的对应子目录中,每个工具都有独立的构建脚本(通常是 Makefile)。
build_termony_hnps() {
cd ${PROJ_BASE_HOME} && make -C build-hnp
}
以 tree 工具为例,其 Makefile 通常执行以下步骤:
- 下载并解压源码包
- 使用鸿蒙交叉编译工具链进行编译
- 将生成的可执行文件安装到本地临时构建目录
- 将该可执行文件拷贝至统一的
sysroot目录,供后续 HAP 打包使用 - 同时生成文件清单(如
file.lst),记录该工具涉及的文件路径,供打包流程引用
$ cat build-hnp/tree/Makefile
include ../utils/Makefrag
all: download/2.2.1.tar.gz
rm -rf temp build
mkdir -p temp build
cd temp && tar xvf ../download/2.2.1.tar.gz
cd temp/tree-2.2.1 && make CC=$(OHOS_SDK_HOME)/native/llvm/bin/$(OHOS_ARCH)-unknown-linux-ohos-clang CFLAGS="-O3 -static -std=c11 -pedantic -Wall -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DLINUX" LDFLAGS="-static"
cd temp/tree-2.2.1 && make install -j $(shell nproc) MANDIR=$(shell pwd)/build/share/man DESTDIR=$(shell pwd)/build/bin
mkdir -p ../sysroot
cp -rv ./build/. ../sysroot | tee file.lst
download/2.2.1.tar.gz:
mkdir -p download
cd download && $(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 app install entry-default-unsigned.hap
[Info]App install path:E:\entry-default-unsigned.hap msg:install bundle successfully.
AppMod finish
运行

注意
- 以上方法仅做实验调试,目录结构也并未完全遵守编译规则;
- 确保
Termony原工程能编译成功,再来添加测试自定义工具,不然很难定位问题所在。
更多推荐



所有评论(0)