在 Android Termux 环境下安装 Hermes Agent 的踩坑与解决实践
1. 业务场景与核心挑战
运行环境:
- 操作系统:Android (基于 Termux 终端模拟器)
- 开发工具:Python 3.13, Clang, Rust 工具链
- 业务场景:在移动端设备上本地化部署并运行 Hermes Agent AI 代理工具。
核心挑战:
移动端 Termux 环境虽然提供了高度还原的 Linux 体验,但由于其底层依然依赖 Android 的 API 和特殊的包管理机制,在安装包含大量 C/Rust 扩展的复杂 Python 项目时,极其容易遭遇依赖缺失、编译死锁和平台兼容性阻断。
2. 官方一键脚本的初次尝试与死锁陷阱
踩坑重现:
起初,我尝试直接使用官方提供的一键安装脚本,期望能快速完成部署:
1 | curl -fsSL [https://hermes-agent.nousresearch.com/install.sh](https://hermes-agent.nousresearch.com/install.sh) | bash |
输出结果(异常卡死):
1 | Detected: android (termux) |
脚本在输出最后一行警告后,便彻底失去响应,长时间假死。
原因剖析:
这是 Termux 下典型的管道符执行“暗坑”。官方安装脚本在后台调用了 pkg 或 apt 来安装依赖,而包管理器在此刻弹出了类似 [Y/n] 的交互式确认提示。由于使用了 curl ... | bash 的无头执行方式,终端的交互界面被直接屏蔽,导致脚本在此处死锁等待,永远等不到用户的输入。
应对策略:
使用 Ctrl+C 强行打断死锁,改为手动执行带 -y 参数的静默更新与基础依赖安装:
1 | pkg update && pkg upgrade -y |
3. 突破网络连通性与命令行代理限制
跨过了基础依赖的坑后,再次运行安装脚本,结果又遭遇了网络相关的阻断。
输出结果(网络报错):
1 | Node.js v26.3.1 installed via pkg |
紧接着,在脚本尝试静默安装 pkg-config libffi openssl 时,又一次因为 [Y/n] 提示陷入了卡死。
原因剖析:
- 根证书缺失: Termux 环境初始未携带完整的 CA 证书链,导致 HTTPS 请求被拒。
- 终端不走系统 VPN: Android 系统状态栏虽然显示梯子已连接,但 Termux 中的命令行工具(如
curl,pip)默认处于直连状态,无法穿透网络限制拉取国外资源。
应对策略:
补全证书和所有底层依赖,并手动注入本地代理端口的环境变量(假设代理软件的本地 HTTP 端口为 7890):
1 | # 1. 安装证书与剩余底层依赖 |
4. 攻克硬核编译阶段的底层报错
在解决了网络与基础包问题后,脚本进入了漫长的 pip install 阶段,但这恰恰是最痛苦的环节。
坑一:Cryptography 模块编译“假死”与 Android API 变量缺失
由于 Android 环境没有预编译的 Python Wheel 包,安装 cryptography 时需要本地化调用 Rust 编译,终端只显示一行 Installing build dependencies ... | 并伴随着手机发热。
为了打破这种“不知道是不是死机”的黑盒状态,我通过 Ctrl+C 打断,并开启 -v 详细日志模式手动安装:
1 | pip install cryptography==46.0.7 -v |
输出结果(Maturin 构建崩溃):
1 | Error: maturin failed |
原因剖析: 在 Android 上使用 maturin 编译 Rust 扩展库时,编译器必须知道具体的系统 API 级别,否则无法链接底层的 C 库。官方一键脚本遗漏了这一关键变量的注入。
解决方案: 向系统注册 API 级别变量,然后重试编译。
1 | export ANDROID_API_LEVEL="$(getprop ro.build.version.sdk)" |
坑二:Psutil 平台硬编码封杀
当终于熬过长达十几分钟的 Rust 编译后,安装脚本又在构建 psutil 模块时彻底阵亡。
输出结果(致命错误):
1 | platform android is not supported |
原因剖析: psutil 的官方开发者在最新版本中硬编码封杀了 Android 平台。一旦检测到运行在安卓下,就会直接抛出该异常并罢工。此时,盲目拉取最新依赖的官方“一键安装脚本”已经彻底宣告破产。
5. 最终落地:摒弃一键脚本的手动完美方案
经过以上一连串的排雷,我得出一个结论:在 Termux 这种特殊环境下,必须放弃高度封装的一键脚本,采用完全透明的手动分步部署。
以下是最终整理出的一套百分百能跑通的纯净安装流程:
步骤一:准备系统环境与代码
1 | # 1. 开启代理(根据实际情况替换端口) |
步骤二:构建受限的虚拟环境
这一步是整个过程的灵魂。我们必须注入 API 变量,并使用官方仓库中针对 Termux 专门编写的约束文件(constraints-termux.txt),以锁定那些未经安卓封杀的老版本依赖(如老版本的 psutil)。
1 | # 1. 初始化虚拟环境 |
步骤三:验证与运行
1 | # 安装完成后,调出配置向导 |
6. 总结与实践建议
- 一键脚本的适用边界:
curl | bash这类脚本在标准 Linux 发行版上体验极佳,但在高度定制的移动端环境(如 Termux)中,往往会因为交互式提示、缺少预编译二进制包、甚至由于开发者恶意封杀平台而失效。掌控底层构建逻辑是移动端开发的必修课。 - 抵抗系统杀后台机制:在手机上成功跑起 Agent 后,最大的敌人变成了 Android 的电池优化机制。建议在 Termux 中执行
termux-wake-lock开启 CPU 唤醒锁,并配合tmux工具将 Hermes 挂载在后台会话中运行,防止 UI 界面被清理导致进程意外中断。