news 2026/6/10 13:55:23

开源鸿蒙终端工具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/6/10 15:46:26

Baklib 提升CMS内容可发现性:打造高效AI内容管理系统

“未找到结果”——这是种让人再熟悉不过的挫败感。尤其当你明明知道自己要找的内容确实存在时。此时&#xff0c;“内容可发现性”便显得格外重要&#xff0c;它指的是用户在网站、门户、系统或平台中查找与访问内容的便捷程度。内容管理系统&#xff08;CMS&#xff09;正是影…

作者头像 李华
网站建设 2026/6/10 15:46:33

低代码组件事件处理实战指南(90%开发者忽略的关键细节)

第一章&#xff1a;低代码组件事件处理的核心概念在低代码平台中&#xff0c;组件事件处理是实现交互逻辑的关键机制。它允许开发者通过可视化配置或少量代码定义用户操作&#xff08;如点击、输入、选择&#xff09;触发的响应行为&#xff0c;从而构建动态应用界面。事件与动…

作者头像 李华
网站建设 2026/6/9 12:57:25

告别单一数据格式:构建支持文本、音频、图像的R Shiny应用全攻略

第一章&#xff1a;告别单一数据格式&#xff1a;R Shiny多模态导入的演进与挑战随着数据分析场景日益复杂&#xff0c;传统的单一封闭式数据输入方式已无法满足现代交互式应用的需求。R Shiny 作为 R 语言中构建 Web 应用的核心框架&#xff0c;正逐步从仅支持 CSV 文件上传&a…

作者头像 李华
网站建设 2026/6/10 17:34:54

R语言在环境监测中的高级应用(时空数据分析与可视化全攻略)

第一章&#xff1a;环境监测的 R 语言时空可视化在环境科学研究中&#xff0c;对空气质量、水体污染或噪声水平等数据进行时空分析至关重要。R 语言凭借其强大的统计计算与图形绘制能力&#xff0c;成为处理此类任务的首选工具。通过整合空间坐标与时间序列信息&#xff0c;研究…

作者头像 李华
网站建设 2026/6/9 22:27:55

【高性能Java编程】:泛型使用中的5大性能陷阱及规避方案

第一章&#xff1a;泛型的性能在现代编程语言中&#xff0c;泛型不仅提升了代码的可重用性与类型安全性&#xff0c;也对程序运行时性能产生深远影响。合理使用泛型可以避免重复的类型转换和装箱/拆箱操作&#xff0c;从而提升执行效率。减少运行时类型检查 传统使用接口或基类…

作者头像 李华
网站建设 2026/6/10 16:18:13

从零开始部署Qwen3-VL-30B:Linux环境配置与Python安装详解

从零开始部署 Qwen3-VL-30B&#xff1a;Linux 环境配置与 Python 安装实战 在当今 AI 技术飞速演进的背景下&#xff0c;多模态大模型正逐步成为智能系统的核心大脑。尤其是像 Qwen3-VL-30B 这类兼具超大规模参数和高效推理能力的视觉语言模型&#xff0c;已经不再是实验室里的…

作者头像 李华