news 2026/6/16 20:13:27

[鸿蒙PC命令行移植适配]移植rust三方库broot到鸿蒙PC的完整实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[鸿蒙PC命令行移植适配]移植rust三方库broot到鸿蒙PC的完整实践

欢迎加入【开源鸿蒙PC社区】,一起共建鸿蒙化C/C++三方库生态。

前言

broot是一个由 Canop(Denys Séguret)开发的文件浏览器和启动器,它融合了树形目录浏览、模糊搜索、文件预览和快速操作等强大功能。与传统的文件管理工具不同,broot 采用交互式终端界面,允许用户实时过滤和导航目录结构,通过快捷键快速预览文件、编辑内容、执行命令或跳转到目标目录。它内置语法高亮、Git 状态显示、磁盘空间分析等功能,是终端环境下高效文件管理的理想选择。

前置条件

环境/工具描述
适配库broot
开源协议"MIT"
源码版本1.56.4
目标平台鸿蒙PC
依赖项
操作系统平台macOS
原仓库地址https://github.com/Canop/broot
鸿蒙化适配仓库地址https://atomgit.com/OpenHarmonyPCDeveloper/ohos-broot
Ubuntu中搭建鸿蒙PC 三方库交叉编译构建开发环境https://blog.csdn.net/zl392321162/article/details/159284760
macOS中搭建鸿蒙 PC 三方库交叉编译开发环境https://blog.csdn.net/zl392321162/article/details/159284830
Windows 10上安装和使用WSL 2、安装Ubuntu 24详细指南https://blog.csdn.net/yyz_1987/article/details/148545443
鸿蒙 PC 命令行适配指南(Mac 版)https://blog.csdn.net/qq_39132095/article/details/154796658
鸿蒙 PC 生态三方软件移植:开发环境搭建及三方库移植指南https://blog.csdn.net/yyz_1987/article/details/154794871
OpenHarmony Linux 命令行工具适配实战:基于Cursor × WSLtree 2.2.1交叉编译与HNP打包全流程指南https://weishuo.blog.csdn.net/article/details/155140843
社区维护的鸿蒙 PC 生态命令行工具构建框架lycium_plusplushttps://atomgit.com/OpenHarmonyPCDeveloper/lycium_plusplus
支持Rust三方库适配的扩展lycium框架https://atomgit.com/CodexBai/lycium_plusplus.git
鸿蒙PC端二进制文件签名命令行使用指南https://blog.csdn.net/jianguo888888/article/details/156644386
hnp包验证环境https://bxming.blog.csdn.net/article/details/155073889

系列索引

篇章标题内容
第一篇概述与环境配置Lycium 概念、构建机要求、OHOS SDK 配置
第二篇项目结构与适配目录创建目录结构、community vs thirdparty、创建适配目录
第三篇HPKBUILD 编写详解元数据字段、过程函数、三种构建系统写法
第四篇构建执行与产物获取构建流程、日志分析、多库递归、HAP 集成
第五篇流程图与角色职责完整流程图、各角色职责、协作时序
第六篇关键注意事项与最佳实践依赖管理、架构超集、日志调试、外部适配仓
第七篇快速参考与模板入门步骤、模板、完整案例、检查清单
第八篇「番外」扩展lycium框架使其满足rust三方库适配不改变框架原有设计,增加Rust三方库适配能力

一、环境配置

1 OpenHarmony SDK 安装

1.1 下载 SDK(环境搭建)

从OpenHarmony 官方首页下载ohos-sdk压缩包,步骤省略,详情可见前置条件中环境搭建相关文章。

SDK 下载注意事项

  • 需要注册并登录AtomGit账户才可以下载。
  • 使用Mac系统的开发者一定要下载linux版本的 sdk。
  • 存放路径不要含有中文字符、空格或特殊字符,建议直接放在用户根目录。
  • 资源目录中依赖ohos-sdk压缩包,解压后请勿移动/删除原始压缩包。
1.2 SDK 放置位置

接下来,我们需要将ohos-sdk解压并放置到适当的位置。以下是适用于LinuxmacOS的示例命令:

# Linux / macOS 示例(包名以 DCP 页面为准)cd~/tar-xzfohos-sdk-linux-v5.0.0-*.tar.gzmvohos-sdk ohos-sdk# 统一命名为 ohos-sdk
1.3 SDK 目录结构

解压后 SDK 的目录结构大致如下:

ohos-sdk/ ├── linux/# 主机平台工具链│ ├── native/# Native 开发相关工具│ │ ├── build-tools/# cmake、ninja 等构建工具│ │ ├── llvm/# LLVM 工具链(clang、lld 等)│ │ ├── sysroot/# 系统根目录,包含 OHOS 头文件和库│ │ ├── nativeapi_syscap_config/ │ │ └──... │ └──... └──...
1.4 环境变量配置

将 SDK 路径添加到 shell 配置文件(如~/.zshrc~/.bashrc~/.bash_profile):

# OpenHarmony SDK 路径exportOHOS_SDK_HOME="$HOME/ohos-sdk"exportOHOS_NATIVE_HOME="$OHOS_SDK_HOME/linux/native"# 添加到 PATHexportPATH="$OHOS_NATIVE_HOME/build-tools/bin:$OHOS_NATIVE_HOME/llvm/bin:$PATH"# 验证source~/.zshrc# 或 source ~/.bashrc
1.5 验证 SDK 配置

使用以下命令验证 OHOS SDK 是否正确配置:

# 检查 SDK 路径echo$OHOS_SDK_HOME# 期望输出: /Users/your-username/ohos-sdk# 检查工具是否在 PATH 中whichcmakewhichninja# 期望输出: /Users/your-username/ohos-sdk/linux/native/build-tools/bin/cmake# 期望输出: /Users/your-username/ohos-sdk/linux/native/build-tools/bin/ninja# 检查 SDK 工具目录ls$OHOS_NATIVE_HOME# 期望看到: build-tools llvm sysroot nativeapi_syscap_config 等目录# 验证工具版本cmake--versionninja--version

2 Rust 工具链安装

Rust工具链的安装方法在所有平台上基本一致,关键在于添加正确的 OHOS 目标平台支持。

2.1 安装 Rust
# 安装 Rust(如果未安装)curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|sh# 验证安装rustc--version# 应显示 rustc 1.xx.x 或更高版本cargo--version# 应显示 cargo 1.xx.x
2.2 添加 OHOS 目标平台
# 添加 OHOS 的目标平台支持rustup targetaddaarch64-unknown-linux-ohos
2.3 配置 Rust 环境变量
# Rust 环境变量(通常由 rustup 自动添加)exportCARGO_HOME="$HOME/.cargo"exportPATH="$CARGO_HOME/bin:$PATH"exportOHOS_RUST_TARGET=aarch64-unknown-linux-ohos# 验证source~/.zshrcecho$OHOS_RUST_TARGET# 期望输出: aarch64-unknown-linux-ohos

注意:实际编译时,lycium会自动设置环境变量,用户一般无需手动设置。

二、适配步骤

1. 分析broot构建特性

brootRust语言编写,使用Cargo作为构建系统。编译后产出的二进制命令为broot(与包名相同)。broot 的Cargo.tomldefault = []表示无默认特性,可选特性包括clipboard(剪贴板支持)和kitty-csi-check(Kitty 终端 CSI 检测),适配时选择标准构建方式即可。

核心特性

  1. 交互式树形导航

    ​ 以树形结构展示目录层级,支持键盘上下键导航、展开/折叠目录、返回上级目录等操作,配合实时模糊搜索可快速定位目标文件或目录。

  2. 模糊搜索与过滤

    ​ 支持实时模糊搜索(fuzzy search),用户输入关键词后立即过滤出匹配的文件和目录,搜索结果以最佳匹配排序,并在树中高亮显示。

  3. 文件预览与语法高亮

    ​ 支持在 broot 内部直接预览文件内容,内置syntect语法高亮引擎,可对多种编程语言和文本格式进行着色显示。

  4. Git 状态集成

    ​ 通过:gf显示文件 Git 状态(新增、修改、删除等),通过:gs仅显示git status中的文件列表,支持从 broot 内部执行 diff、编辑和还原操作。

  5. 磁盘空间分析

    ​ 通过--whale-spotting(或-w)进入"鲸鱼 spotting"模式,快速识别占用磁盘空间较大的文件和目录,并按大小排序展示。

  6. 自定义命令与快捷键

    ​ 支持通过配置文件自定义命令、主题和快捷键,可绑定外部编辑器、文件管理器等工具,并支持通过:quit:cd:open等内置命令实现工作流自动化。

  7. 文件系统使用概览

    ​ 通过:fs命令查看所有文件系统的挂载点、总大小、已用空间和可用空间,帮助用户全面掌握磁盘使用情况。

2. 创建适配项目

参考前置条件列表完成lycium_plusplus交叉框架编译环境搭建,以及lycium_plusplus交叉框架代码克隆,在lycium_plusplus/RustAdapt创建目标库broot适配目录为ohos-broot

为什么是ohos-broot?为了和源库名称做区分,表示该库用于ohos设备。

ohos-broot创建可以借助编辑器工具(如VSCode)或者使用文件夹在lycium_plusplus/RustAdapt目录下创建目标库适配目录ohos-broot,也可以执行以下命令进行创建。

# 我将交叉编译框架克隆在根目录,此处可改为正确的目录地址cd~/lycium_plusplus/RustAdaptmkdirohos-broot

3. 编写HPKBUILD

然后将lycium/template/HPKBUILD.cargo拷贝到RustAdapt/ohos-broot目录下,并重命名为HPKBUILDHPKBUILDlycium交叉编译框架完成编译构建的核心配置文件,定义包的元信息、依赖、构建和打包逻辑。需要根据模板在HPKBUILD开头声明broot的基本信息,这些字段被lycium用于下载、组织和记录:

# lycium_plusplus/RustAdapt/ohos-broot/HPKBUILDpkgname=broot# 库名pkgver=1.56.4# 库版本pkgrel=0# 发布号pkgdesc="File browser and launcher"# 库描述url="https://github.com/Canop/broot"# 官网链接archs=("arm64-v8a")# cpu 架构license=("MIT")depends=()# 依赖库的目录名 必须保证被依赖的库的archs是当前库的archs的超集makedepends=("cargo""rustc")# 构建库时的依赖工具->需要用户安装的工具source="https://github.com/Canop/broot/archive/refs/tags/v${pkgver}.tar.gz"# 库源码下载链接downloadpackage=true# 是否自动下载压缩包,如若不写默认 true. (应对一些特殊情况,代码只能 git clone (项目中依赖 submoudle ))autounpack=true# 是否自动解压,如若不写默认 true, 如果为 false 则需要用户在 prepare 函数中自行解压buildtools=cargo# 编译方法: cmake(默认) | configure | cargo | 其它则不在此注入 buildargs,由 build() 自行处理builddir=broot-${pkgver}# 源码压缩包解压后目录名 编译目录名packagename=$builddir.tar.gz# 压缩包名
字段配置值用途
pkgnamebrootpkgname=broot:包名,用于在LYCIUM_ROOT/usr/下创建安装目录、标识依赖关系。
pkgver1.56.4pkgver=1.56.4:上游版本号,与https://github.com/Canop/broot仓库最新发行版本保持一致。
pkgrel0pkgrel=0:包发布号,当同一上游版本需要重新打包时递增,首次适配为 0。
pkgdesc-包的简短描述,取自broot官方README
url-上游项目主页URL
archs("arm64-v8a")archs=("arm64-v8a"):声明支持的架构数组。此处仅列出arm64-v8a,但代码内部实际也处理了armeabi-v7ax86_64,此处是声明"主要支持"而非"仅支持"。当前鸿蒙 PC 设备为arm64架构,因此必须配置arm64-v8a
license("MIT")broot采用MIT协议。
depends()无运行时依赖。
makedepends("cargo" "rustc")makedepends=("cargo" "rustc"):编译时依赖。Rust工具链是构建前提。
sourcerefs/tags/v${pkgver}.tar.gz源码包下载地址。使用${pkgver}变量拼接,下载broot 1.56.4release tarball(注意标签含v前缀)。
downloadpackagetruedownloadpackage=true:告诉lycium构建系统自动下载source指定的源码包。如果设置为false需要在目标库目录下手动下载源码包。
autounpacktrueautounpack=true:下载后自动解压,无需手动解压步骤。如果设置为false需要手动解压。
buildtoolscargobuildtools=cargo:声明构建工具类型。lycium据此选择Cargo构建流程(而非make/cmake等)。
builddirbroot-${pkgver}builddir=broot-${pkgver}:解压后的源码目录名。prepare()/build()/package()均通过cd $builddir进入此目录。
packagename${builddir}.tar.gzpackagename=${builddir}.tar.gz:源码包文件名,用于校验/定位。

package函数中编译完成后的二进制文件名称与包名一致,broot项目编译完成后,会产出一个名为broot的二进制文件,此处需要将cp target/${OHOS_RUST_TARGET}/release/xxx改为cp target/${OHOS_RUST_TARGET}/release/broot并复制到安装目录。

# 打包安装package(){# 进入 Rust 项目目录(和编译时同一个目录)cd$builddir# 定义安装路径:鸿蒙库的安装目录DEST="$LYCIUM_ROOT/usr/$pkgname/$ARCH"# 创建安装目录bin 文件夹mkdir-p$DEST/bin/# 【关键】把编译好的 Rust 程序 → 复制到目标目录的 bin 文件夹cptarget/${OHOS_RUST_TARGET}/release/broot"$DEST/bin/"cd$OLDPWD}

4 HNP 打包配置

lycium_plusplus/RustAdapt/ohos-broot目录下创建hnp.json文件,因为在HPKBUILD中存在archive函数,用于将产物打包为output/<arch>/<pkgname>_<ver>.tar.gz,或执行 HNP 打包,详细介绍可参考系列索引-构建执行与产物获取。

{"type":"hnp-config","name":"broot","version":"1.56.4","install":{}}

5 交叉编译并解决可能存在的问题

HPKBUILD中函数不做改变,在lycium_plusplus/lycium目录下打开终端工具,输入./build.sh ohos-broot进行第一次交叉编译。

如果提示ALL JOBS DONE!!!表示当前交叉编译没有问题,编译后的产物,可以在lycium/usr/目录和out/arm64-v8目录下查看。

三、 在鸿蒙PC上验证交叉编译后的broot命令是否可用

lycium_plusplus/lycium/usr/broot/arm64-v8a/bin/broot二进制文件传到鸿蒙PC上,方式有多种,可以通过聊天软件。macos设备可以在App Store下载【鸿蒙星河互联】,通过分享方式将broot二进制文件发送到鸿蒙PC设备上,这种方式需要鸿蒙PC开启华为分享为所有人可见。在鸿蒙PC右下角会弹出接受弹窗,选择"接受"或者"另存为",接受broot二进制文件。接受后的二进制文件是不可以直接运行的,哪怕使用chmod +x broot这种方式授权也是无法运行的。需要给二进制文件进行签名后才可以,在鸿蒙 PC 侧执行前涉及二进制签名流程,可参考《鸿蒙PC端二进制文件签名命令行使用指南》。打开鸿蒙PC终端,输入以下命令为broot签名授权。

# 进入broot所在目录cdDesktop# 执行签名binary-sign-tool sign-inFilebroot-outFilebroot-selfSign"1"# 授予权限chmod+x broot# 查看broot版本./broot--version# 使用 broot 查看当前目录的树形结构./broot.# 使用 broot 查看当前目录并按大小排序./broot --whale-spotting.

四、 FAQ

执行签名命令出现“zsh: command not found: binary-sign-tool”提示。

需要在应用市场搜索DevBox并安装,DevBox提供了一些开发者常用命令,主要包含文件和目录操作命令、网络命令、构建命令、签名工具等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 3:21:19

MuleSoft企业级AI编排:构建可治理、可审计的LLM生产落地中枢

1. 项目概述&#xff1a;当企业级集成平台遇上大语言模型&#xff0c;不是叠加&#xff0c;而是重定义“AI Orchestration in Action: How MuleSoft and LLMs Fuel the Future of Enterprise AI”——这个标题里藏着一个正在发生的、静默却剧烈的范式转移。它说的不是“用MuleS…

作者头像 李华
网站建设 2026/6/8 21:47:39

告别重复造轮子:用快马平台高效生成han1me核心功能模块代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成能提升han1me类应用开发效率的关键模块代码&#xff0c;具体需求如下&#xff1a;生成一个可复用的番剧卡片组件&#xff0c;包含响应式布局、懒加载图片、悬停显示详情动画…

作者头像 李华
网站建设 2026/6/8 14:22:06

用快马平台高效集成厂长资源中的图表组件提升开发效率

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 在厂长资源中找到一段前端图表组件的代码片段&#xff0c;但缺少完整的数据对接和样式配置&#xff0c;请使用快马平台生成一个可直接复用的Vue3组件&#xff0c;核心功能是集成EC…

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

双AI协同编程:融合快马AI与本地Ollama模型的应用开发实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请创建一个演示AI辅助开发全流程的项目&#xff0c;同时利用快马平台AI和本地Ollama模型。项目目标&#xff1a;一个简单的任务管理Web应用。请先利用快马平台的AI能力生成基础的项…

作者头像 李华