- 移动开发
- AI 应用
- CLI
- 开发工具
【免费下载链接】openclaw-android
Run OpenClaw on Android with a single command — no proot, no Linux
OpenClaw on Android 是一个在 Android(Termux)上通过单条命令运行 OpenClaw AI 智能体平台的项目——它不装 proot-distro、不装完整 Linux 发行版,只引入 glibc 动态链接器(ld.so),约 200MB 开销即可让 Node.js 与 OpenClaw 原生速度跑起来。很多开发者装完就想问一句:它凭什么这么稳?答案就在其平台插件架构里:编排器(orchestrator)与平台插件彻底解耦,依赖被拆成 L1/L2/L3 三层,由一个config.env声明式驱动。下面我们把这套架构拆开讲透 🧩。
一张图看懂:L1/L2/L3 三层依赖模型
整个项目的分层结构,在 install.sh 与 scripts/ 目录中体现得非常清晰:
┌─────────────────────────────────────────────────────────────┐ │ 编排器(install.sh / update-core.sh / uninstall.sh) │ │ ── 平台无关。读 config.env,然后委托给下层 │ ├─────────────────────────────────────────────────────────────┤ │ 共享脚本(scripts/) │ │ ── L1: install-infra-deps.sh(无条件执行) │ │ ── L2: install-glibc.sh / install-nodejs.sh / │ │ install-build-tools.sh(由 config.env 开关控制) │ │ ── L3: 可选工具(用户逐项 Y/n 选择) │ ├─────────────────────────────────────────────────────────────┤ │ 平台插件(platforms/<name>/) │ │ ── config.env: 声明依赖(PLATFORM_NEEDS_*) │ │ ── install.sh / update.sh / uninstall.sh / verify.sh / ... │ └─────────────────────────────────────────────────────────────┘| 层级 | 定位 | 内容示例 | 控制方 | 失败策略 |
|---|---|---|---|---|
| L1 | 基础设施,必装 | git、pkg update/upgrade、路径目录 | 编排器(无条件) | 直接失败退出 |
| L2 | 平台运行时,条件安装 | glibc 链接器、Node.js、编译工具链 | config.env的PLATFORM_NEEDS_*开关 | 幂等、跳过已装 |
| L3 | 可选增强,用户自选 | tmux、code-server、Chromium、AI CLI | 安装时逐项 Y/n 提示 | 仅告警并跳过,绝不中止主流程 |
分层的核心收益一句话:新平台接入 = 在platforms/下加一个目录,声明自己需要哪些 L2 依赖即可,安装器一行代码都不用改。
依赖声明:config.env 是唯一的"事实来源"
OpenClaw 插件的依赖声明全部集中在 config.env 这一个文件里:
# 依赖声明 —— 编排器读这些标志做条件安装 PLATFORM_NEEDS_GLIBC=true PLATFORM_NEEDS_NODEJS=true PLATFORM_NEEDS_BUILD_TOOLS=true PLATFORM_NEEDS_PROOT=false # 版本锁定(SSOT,必须成对修改) PLATFORM_NPM_PACKAGE_VERSION="2026.9.8" PLATFORM_NODE_VERSION="24.21.0"编排器通过 lib.sh 中的load_platform_config()加载它,随后在 install.sh 的第 5 步按开关条件执行 L2 脚本:
step 5 "Platform Runtime Dependencies (L2)" if [ "${PLATFORM_NEEDS_GLIBC:-false}" = true ]; then bash scripts/install-glibc.sh; fi if [ "${PLATFORM_NEEDS_NODEJS:-false}" = true ]; then bash scripts/install-nodejs.sh ...; fi if [ "${PLATFORM_NEEDS_BUILD_TOOLS:-false}" = true ]; then bash scripts/install-build-tools.sh; fi这里藏着两个精妙之处:
- 声明式而非硬编码:
PLATFORM_NEEDS_PROOT=false表示未来某个平台可以声明true,编排器里那行pkg install -y proot就会自动生效,编排器自身永远不需要为平台特判。 - 版本锁是"成对的"(version pin pair):
OpenClaw 2026.9.8 + Node.js 24.21.0是一个经过验证的组合,注释明确写着"两条必须一起改,绝不单独改"(config.env)。因为install.sh与platforms/openclaw/install.sh是父子进程关系,子进程无法继承父进程变量,所以平台脚本会自己再加载一次config.env(install.sh),两处取同一个 SSOT,避免版本漂移。
L2 层深潜:glibc、Node.js 与"ld.so 包装器"
L2 是 Android 适配最关键的一层。以 install-glibc.sh 为例,它做的事情远比"装个包"复杂:
- 安装 pacman 并强制初始化签名密钥环(
pacman-key --init/--populate),失败即中止——包签名永远校验,老版本安装器遗留的SigLevel = Never配置还会被自动修复(install-glibc.sh); - 用临时配置文件强制
DatabaseRequired级别再安装glibc-runner,拿到ld-linux-aarch64.so.1动态链接器; - 补齐辅助库(如
libcap.so.2,见 patches/glibc-libs/)和 glibc 的/etc/hosts(否则dns.lookup('localhost')会解析失败,gateway 绑定端口直接挂掉,install-glibc.sh); - 写入
.glibc-arch架构标记文件,供后续oa --status与更新器判断。
而 install-nodejs.sh 最反直觉的设计是:不用 patchelf。Android 的 seccomp 策略会让 patchelf 改写过的二进制触发 SIGSEGV,所以官方 Node.js linux-arm64 包全部通过"ld.so 直接执行"的包装器脚本启动(exec ld.so binary "$@"),下载还带 sha256 校验、staging 目录试跑、失败自动回滚——一个脚本里塞满了防御性工程。
在 L2 装好后,用 Termux 自带的工具就能排查网络问题,例如termux-ifconfig查看虚拟网卡地址:
版本钉死(Version Pinning):为什么你不该跑 openclaw update
"平台被锁定在 2026.9.8"不是偷懒,而是这套架构的安全基石,并且是多道纵深防御:
| 防线 | 位置 | 作用 |
|---|---|---|
oa统一入口 | oa.sh | 更新只走oa --update,由本项目控制节奏 |
openclaw update守卫 | openclaw-shim.sh | 拦截 OpenClaw 自带的更新命令 |
| 环境变量 | env.sh | OPENCLAW_NO_AUTO_UPDATE=1屏蔽自动更新器 |
| 更新器内 Node 门禁 | update-core.sh | Node.js 未收敛到锁定版本 →在第 4 步之前停下,平台包完全不动 |
| 防降级检查 | platforms/openclaw/update.sh | 已装版本比锁定版本新时拒绝回退(新版可能已迁移数据格式) |
更新流程 update-core.sh 本身也严格复用同一套插件架构:下载最新 tarball → 校验必需文件(config.env、update.sh等)→ 刷新共享脚本与oaCLI →Node 门禁→ 委托platforms/<name>/update.sh→ 只更新已装的 L3 工具。注意它第 2 步的必需文件清单里,platforms/$PLATFORM/config.env是硬性校验项——连"声明文件"本身也纳入了完整性检查。
L3 层的哲学:失败只告警,绝不牵连
L1/L2 是"要么成功要么失败",L3 完全相反。看 install.sh 第 7 步的循环:
for _tool in tmux ttyd dufs android-tools; do ... pkg install -y "$_tool" || echo -e "[WARN] $_tool 安装失败(非关键)— 已跳过" done任何可选工具失败都只是黄色[WARN]一行,绝不exit。连 npm 安装 Claude Code、Gemini CLI 也各自包在独立if里(install.sh)。这种故障隔离让用户勾选 11 个可选工具时,最坏情况也只是某个工具没装上,核心 OpenClaw 完好无损。所有选项还在安装开始前一次性收集完毕(第 3 步),用户选完就可以走开——这个交互细节也是为"3~10 分钟无人值守安装"服务的。
安装与更新如何闭环:双层验证
验证也遵循同样的分层。tests/verify-install.sh 负责编排器层检查(FAIL 级:Node 版本是否等于锁定值、OA_GLIBC=1、glibc 链接器与 node 包装器是否存在、.bashrc环境块……),然后委托平台层检查platforms/openclaw/verify.sh:openclaw --version能跑还不够,它还要读package.json对比锁定版本、检查 update guard 是否还在(因为手动npm install -g openclaw会覆盖掉守卫,verify.sh)、CONTAINER=1是否生效等。
安装完成后,这个平台就能通过 Dashboard 管理网关、运行时与工具:
日常排障则可以直接看 platforms/openclaw/status.sh 输出的组件清单(OpenClaw / Node.js / clawdhub / glibc 各组件 / AI CLI 工具 / 磁盘占用),配合 docs/troubleshooting.md 使用。
架构启示:这套设计值多少分?
从开发者视角总结 OpenClaw on Android 平台插件架构的 5 个可借鉴点:
- 插件 = 目录约定。
platforms/<name>/下固定一套config.env / install.sh / update.sh / verify.sh / env.sh / status.sh,没有注册机制、没有框架,纯 shell 目录约定——简单到任何人 10 分钟能读完。 - 声明驱动的条件安装。
PLATFORM_NEEDS_*把"装什么"的决定权交给声明文件,编排器只做 if,杜绝了case $platform in式的平台特判蔓延。 - SSOT 版本锁 + 纵深防御。锁定版本只在 config.env 出现一次(但子进程会重新加载它),而"不许降级、不许自更新"的守卫被布置在 shim、环境变量、更新门禁、验证器四处,任何一处被绕过都有下一道兜底。
- 失败策略分层:L1 硬失败、L2 幂等自愈(重跑即修复)、L3 软失败跳过——同一套脚本里三种容错语义泾渭分明。
- 对称性。安装 8 步(install.sh)与更新 5 步(update-core.sh)共享同一个
lib.sh、同一份平台目录、同一把运行锁(~/.openclaw-android/.tools.lock),甚至锁的获取/接管/释放代码都刻意保持逐行一致。
这套架构不止服务 Termux 脚本路线:仓库里的 Android 原生应用(android/app/src/main/java/com/openclaw/android/ 的BootstrapManager.kt、OpenClawService.kt等)与内嵌 WebView 界面(android/www/src/)最终执行的是同一套post-setup.shOTA 脚本流程,三层依赖模型在两条路线上是同构的——这正是"平台无关编排器"分法的红利。
想继续深入?建议按这个顺序读源码:install.sh(主流程)→ platforms/openclaw/config.env(声明)→ platforms/openclaw/install.sh(平台包安装)→ update-core.sh(更新与防御),配合 docs/troubleshooting.md 与 docs/termux-ssh-guide.md 建立完整的排障视角。理解了 L1/L2/L3,你就理解了 OpenClaw on Android 为什么敢承诺"一条命令装完"。
- 移动开发
- AI 应用
- CLI
- 开发工具
【免费下载链接】openclaw-android
Run OpenClaw on Android with a single command — no proot, no Linux
相关推荐
MemOS 本地插件 Reflect2Evolve V7 实战:用 TaskCLI 真实 Python 项目驱动 OpenClaw 完成 L1/L2/L3/Skill 沉淀与三层召回闭环
MemOS 本地插件 Reflect2Evolve V7 实战:用 TaskCLI 真实 Python 项目驱动 OpenClaw 完成 L1/L2/L3/Sk
人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-pluginESPectre 固件架构的三层拆分:Core、Runtime 与 Frontend 分层设计解读
ESPectre 固件架构的三层拆分:Core、Runtime 与 Frontend 分层设计解读 ESPectre 是一套面向 ESP32 的 Wi Fi C
人工智能机器学习物联网嵌入式智能硬件边缘计算Loop Engineering 记忆分层指南:用 L1/L2/L3 三层记忆架构管理 AI 编码 Agent 的上下文与成本
Loop Engineering 记忆分层指南:用 L1/L2/L3 三层记忆架构管理 AI 编码 Agent 的上下文与成本 本指南以仓库中的 memory
人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考