我在这台 Redmi 上折腾了整整两个晚上,总算把 Claude Code 从电脑搬到了手机里。手机才是我的第一台电脑,白天写代码,晚上躺床上也想改代码,可是笔记本太重不可能天天背着跑。所以我一直在找一个能在 Android 上、真正把 Claude Code 跑起来的方案,而不是那种只能看网页版的阉割体验。折腾到最后,方案其实很朴素:Termux 装 Node.js,然后 npm 全局装一个 @anthropic-ai/claude-code,就这么简单。但在手机上让它跑得顺手、不踩坑,里面还是有不少门道的。这篇文章我就从整体思路、环境准备、实操细节到常见问题,完整记录下来,给想在手机上用 AI 编程助手的朋友一份可以直接跟着做的参考。
首先说清楚:Claude Code 本质上是一个命令行工具,依赖 Node.js 运行时,它要做的事就是在终端里读你的项目文件、理解你的提问,然后写代码、改文件、执行命令。所以手机上要跑它,第一步不是装 Claude Code 本身,而是先解决"有没有一个和 PC 一样的终端环境"。Termux 就是干这个的。它模拟了一个独立的 Linux 用户空间,给你完整的包管理、文件权限和 Shell 环境,权限隔离做得很干净,不需要 root 也能装绝大多数开发工具,这在 Android 上本身就很难得。
1. 在手机上跑 Claude Code:整体思路与技术选型
1.1 这个方案能做什么,解决了什么问题
先说结论:通过在 Termux 里安装 Claude Code,你能在手机上得到一个完整的 AI 结对编程环境。可以打开一个真实存在的项目目录,让它读代码、改 bug、生成 commit,它跑命令也是实打实在这台手机的 Linux 环境里执行。也就是说,你抱着手机去咖啡馆,连上蓝牙键盘,或者干脆只用屏幕键盘,也可以写 Rust 脚本、改 Python 后端、整理配置文件、甚至调试 Termux 里正在跑的 Web 服务。
这套方案解决的最大问题,是打破了对实体电脑的依赖。很多人觉得手机没有生产力,就是因为手机的应用之间是割裂的,文件系统不互通,装一个终端也不知道怎么访问项目文件。但 Cl Code 的逻辑是命令行优先、文件系统直接操作,这一点和手机的"沙盒困境"正好互补——Termux 想办法把手机存储挂载出来,Claude Code 就有了真正的项目上下文。我实际用它管理过一个小型 Node.js 项目,从读取项目结构到修改目标文件,整个过程跟在 Mac 上操作几乎没有区别。
另外一个很多人没意识到的点:Termux 环境比你想的更像一台开发服务器。它支持后台运行,可以配合 termux-services 托管常驻进程;支持 sshd,手机当跳板机也不是不行。Claude Code 在这种环境下不只是"能跑",还可以作为远端开发入口来用。我出门只带手机,回到家发现某台服务器上的服务挂了,就掏出手机、Termux 里跑 claude,让它根据 log 文件定位问题、改好配置、再确认重启命令,几分钟收工。这个场景放在以前,哪怕只是改一个几百字节的 config 文件,都得开电脑。
1.2 为什么是 Termux 而不是其他 Android 终端
Android 上的终端 App 其实有好几个选择,比如 Termux、UserLAnd、Andronix,甚至还有直接在应用内打包成 APK 的"伪发行版"。但我最终一直用 Termux,原因很实际。
首先是软件包覆盖度。Termux 的官方源里维护了大量原生编译的软件包,包括 nodejs-lts、python、rust、clang 等,都是针对 Android 的 bionic libc 交叉编译过的,所以运行性能接近原生,不会像 proot 方案那样在用户态模拟层上损失性能。你用 UserLAnd 跑 Ubuntu,本质是加载一个根文件系统镜像再通过 proot 转译,跑个 claude 这样有大量文件 IO 的 Node.js 程序,性能和路径兼容性都会打折扣。
其次是依赖更新的及时性。Claude Code 虽然是 npm 包,但它对 Node.js 最低版本有要求(现在最低基本都是 18+ 了)。Termux 官方仓库长期跟进 LTS 版本,不会出现想装一个新工具却被老运行时挡路的情况。反观 Play 商店里那个半死不活的 Termux 版本,最后一次推送已经是好几年前的事了,仓库源也迁走了,装上之后连 pkg update 都会报错,更不要说跑 Node 环境了。
最后是权限和目录结构的透明性。Termux 不强行把自己伪装成完整 Linux,它会根据 Android 的沙盒机制把目录映射到你手机上真实的位置:$HOME 是 /data/data/com.termux/files/home,用户可写;$PREFIX 是 /data/data/com.termux/files/usr,包管理器就装在那里。这种设计让 npm、git、ssh 等等工具都天然能用,你对"代码到底写在哪个目录"有绝对的控制感。Claude Code 需要知道项目根目录在哪,需要能写文件,需要执行外部工具,这些要求 Termux 几乎全部原生满足。
2. Termux 环境准备:保姆级安装与初始化
2.1 正确获取 Termux:为什么我建议用 F-Droid 版本
这是第一个大坑,必须先说。Google Play 商店里的 Termux 由于政策原因,已经很久没有新版本推送,而且它内部的包源地址也已经失效,装完基本就是废的。我见过太多新手在 Play 商店装完 Termux,然后怎么 pkg install 都报 404,最后以为是自己手机的问题,其实只是版本来源不对。
正确做法:去 F-Droid 下载 Termux。F-Droid 是一个开源应用商店,Termux 官方维护者主要就是在那里发布 APK。装的时候注意两点。第一,版本号要选最新的 0.118+ 以上,老版本可能存在 Android 10 以上的文件访问问题。第二,如果手机系统开启了"纯纯安装"这种额外拦截,要允许"未知来源应用安装"权限,否则 APK 装不上。
装完之后建议顺手检查一下长按 App 图标看是否支持"后台运行/自启动"。不同厂商 ROM 对这个限制不一样,像小米的 MIUI 或者 ColorOS 默认会杀后台进程。如果在长时间跑 Claude Code 协作任务时,切到后台就断掉,多半是省电策略在作祟,后面我会专门说怎么处理。
2.2 初始化配置:更新软件源与安装基础工具
第一次打开 Termux,它会先自动创建用户目录并下载基础软件包。这个过程中你要联网且保持屏幕常亮。等提示符出现后,先把包管理器和现有软件升级一遍:
pkg update -y && pkg upgrade -y这两条命令会同步 Termux 的仓库索引并更新所有基础包。有的设备会因为网络原因速度很慢,此时可以换到国内镜像源。Termux 的软件源配置在 $PREFIX/etc/apt/sources.list 里,可以把官方源替换成清华镜像源:
pkg install -y termux-tools sed -i 's@packages.termux.dev@mirrors.tuna.tsinghua.edu.cn/termux@' $PREFIX/etc/apt/sources.list pkg update -y提示:换源操作本质只是把下载地址改为国内加速镜像,不改系统任何其他行为。如果已经能用默认源很快完成更新,这一步可以跳过。
这一步会把需要的构建工具也补充好。我习惯装 termux-api、git、openssh、nano,都是后面高频使用的:
pkg install -y termux-api git openssh nanotermux-api 这个包值得单独提一句,它能把手机上的传感器、剪贴板、电池信息、定位等能力通过命令行暴露出来,后面 Claude Code 要调用一些 Android 原生能力时很实用。git 和 openssh 自然不用说,一个是和远端仓库打交道的必备,一个是让电脑能远程连回手机终端的方式。
2.3 存储权限与目录结构理解
Termux 默认只能访问自己的私有目录 /data/data/com.termux/files/home,这其实对开发是件好事,保证了依赖和项目文件不会乱跑。但是你想让 Claude Code 直接读手机内部存储里的已有项目,比如 /storage/emulated/0/Documents,就必须先把存储权限放开。
执行termux-setup-storage,系统会弹窗询问文件访问权限,允许之后,Termux 会在 $HOME/storage 下生成一系列快捷入口:
ls ~/storage # dcim downloads documents movies music pictures shared external-1这里要注意:~/storage/documents对应的是 Android 的 Documents 目录,不是 Termux 自己 $HOME/Documents。你把项目放进手机内部的 Documents,Termux 里访问路径就是 ~/storage/documents/项目名。这个映射关系我一开始经常搞混,后来干脆养成习惯:在手机上管理独立项目时,直接放在 $HOME/projects 下,不和系统存储目录掺杂;只有需要和其他 App 共享的文件才放到 ~/storage/documents 里。
Android 11 以上对文件系统的访问有 scoped storage 限制,Termux 的挂载方式是通过 SAF(存储访问框架)+ 原生目录映射实现的,所以你通过 ~/storage 访问大部分目录没问题,但直接拿 /storage/emulated/0 这种绝对路径去切目录,有时反而会碰壁。Claude Code 启动时如果告诉你目录不可写,多半就是因为它拿到的路径指向了 Android 核心限制区域,这时候用cd ~/storage/documents/xxx的方式切路径往往就好使了。
3. 安装 Node.js 与 Claude Code
3.1 安装 Node.js 运行时
Claude Code 是 npm 包,所以运行时是第一步。Termux 的 nodejs 包有两个版本:nodejs和nodejs-lts。我建议直接装 LTS,稳定压倒一切:
pkg install -y nodejs-lts装完验证版本:
node -v npm -vTermux 里的 npm 全局安装路径默认是 $PREFIX/lib/node_modules,注意这个路径在用户目录的可写范围内,所以理论上不存在 PC 上那种"全局装包需要 sudo 权限"的问题。后面 Claude Code 有个著名的权限坑(no write permission to npm prefix),在 Termux 标准安装方式下不会犯,但如果你是通过 proot 的发行版装的,或者自作主张把 npm prefix 改了,就还是会遇到,我在第 6 节会展开说。
3.2 用 npm 安装 Claude Code
一条命令:
npm install -g @anthropic-ai/claude-code等待下载完成即可。npm 会从 registry 拉到包和依赖,网络通畅的话一两分钟内结束。如果下载慢或者超时,可以把 npm 的 registry 切换到国内镜像:
npm config set registry https://registry.npmmirror.com然后重新执行上面的安装命令。这个修改只影响 npm 的下载源,不会改变包的运行逻辑,放心用。
安装完成后,用绝对路径和软链接验证:
claude --version如果提示 command not found,先检查 $PREFIX/bin 是否在 PATH 中。正常来说 Termux 会自动把 $PREFIX/bin 加入 PATH,如果没生效,可以在 $HOME/.bashrc 里手动补一行:
export PATH="$PREFIX/bin:$PATH"3.3 关于快照版本与自动更新机制
Claude Code 这个工具更新频率很高,几乎每周都有迭代。它的机制是,每次执行 claude 命令时,会先检查是否有新版本,自动用 npm 把自己更新到最新版。好处是永远能用到新特性,坏处是"更新失败"会挡住你干活。
比如我会遇到:
Warning: Auto-update failed: no write permission to npm prefix这个问题在 PC 上很常见,因为 npm 全局目录往往是 /usr/lib/node_modules,普通用户没写权限。在 Termux 里标准安装不会踩这个坑,但如果你把 npm prefix 改到了系统的只读目录,就会犯。解决办法有两个方向。第一个是给 npm 设置一个用户可写的全局目录,在 Termux 里最顺手的是:
npm config set prefix "$HOME/.npm-global" mkdir -p "$HOME/.npm-global" echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc source ~/.bashrc注意这会改变你以后所有全局 npm 包的位置,如果之前已经装了很多包,需要重新npm install -g一次。第二个方向是直接关掉自动更新,如果你有特殊原因要固定某个版本:
export DISABLE_AUTOUPDATER=1或者把这一行写进 ~/.bashrc 永久生效。关掉自动更新之后,要升级就手动再跑一次npm install -g @anthropic-ai/claude-code。
4. 首次启动:登录认证与使用准备
4.1 账号登录与 API Key:两种认证方式
直接在终端里敲 claude,第一次运行会进入认证引导。Claude Code 目前支持两种认证方式:一种是通过 Claude 账号登录(会生成一个会话 Token),另一种是用 API Key。登录方式等你选完,终端会输出一个 URL,在手机浏览器里打开、授权,然后把返回的验证码粘贴回来。
这里有几个和手机的现场体验直接相关的注意点。第一,手机浏览器打开授权链接后,授权完成页面有时会一直卡在"已授权,回到终端",因为手机浏览器不是桌面浏览器,没有自动回跳的机制。这时候不用等它,直接回到 Termux 按回车,它会用你粘贴回来的验证码完成认证。第二,如果你用的是 API Key,在 Termux 里配置方式是把 key 写入环境变量:
export ANTHROPIC_API_KEY="sk-ant-xxxx"建议把这个 export 写进 ~/.bashrc,这样每次打开终端不用重新敲。用 API Key 的方式,Claude Code 走的是付费的 API 计费,按 token 扣费,所以在手机上"无限畅聊"的错觉要克制一下。
4.2 手机键盘与终端交互体验优化
手机上的终端体验和电脑差异最大的地方就是键盘。Termux 顶部有一条可以在设置里定制的额外功能键行(Extra Keys),显示 ESC、CTRL、TAB、/、- 等按键,这在 Claude Code 交互里非常重要。Claude Code 的交互界面依赖上下方向键选择菜单、Ctrl+C 中断、Tab 补全路径。如果你连方向键都没有,会非常痛苦。设置入口:Termux 界面里双指从屏幕边缘左滑,或者用音量减 + K 呼出快捷设置,找到"Extra Keys"打开。
再推荐两个让体验更接近电脑的小配置:
- 在 $HOME/.termux/termux.properties 里加一行
enforce-char-based-input = true,能解决某些输入法下方向键和特殊键输出字符错乱的问题。 - 把终端字体调成支持中文的字体,比如 JetBrainsMono Nerd Font,Claude Code 回答里有中文注释时才不会变成方框。
保存 termux.properties 后执行termux-reload-settings生效。另外,蓝牙键盘能极大提升舒适度,这个就不多说了,谁用谁知道。
我个人的习惯是:手机横屏、开蓝牙键盘、终端字体调小一点、Extra Keys 全开。这么做下来,除了屏幕比电脑小,操作密度和电脑已经很接近了。用手指戳屏幕键盘也能用,但纯虚拟键盘敲命令的速度确实拉垮,属于只适合应急的选项。
5. 手机上用 Claude Code 的实操指南与权限边界
5.1 常用操作与项目工作流
启动后,你会进入 Claude Code 的 REPL,也就是等待你输入的提示符。最基础的操作是直接描述任务,比如"帮我看看当前目录下 src/index.js 里有没有未处理的异常"。Claude 会先分析文件结构,然后告诉你它发现的问题,并给出可执行建议。如果你同意,它会进一步修改文件或者生成新的文件。
我整理了一套在手机上用 Claude Code 效率最高的工作流:
# 1. 进入项目目录 cd ~/projects/my-app # 2. 先让 Claude 读取项目结构和关键文件 claude "先读一下 package.json 和 src/ 的目录结构,告诉我这个项目是干嘛的,然后给我列一个今日待办清单" # 3. 具体任务再追问,比如修一个 bug claude "分析一下 src/utils/date.js,我发现它昨天生成的日期总是少一天,帮我定位并修复,修复前先把问题原因讲清楚" # 4. 完成后让它生成 commit message claude "基于刚才的修改,给我生成一个符合 conventional commits 规范的提交信息"用这种方式,手机上一个完整的小任务闭环:分析、修复、提交,和电脑上别无二致。Claude Code 支持在命令行直接传 prompt 参数,这适合做单次任务;如果只是打开终端随便聊,直接 claude 进交互模式更顺手。
还有一点值得提醒:Claude Code 在执行命令前会询问是否继续,比如它发现要删除某个文件,会输出将要运行的 shell 命令并等待确认。在手机上按 y 确认时,注意屏幕上显示的"执行危险操作"警告别手滑直接一路同意。我在手机上误确认过一次 rm -rf,好在路径是它自己生成的仍有救,但这足以说明在手机上与命令行的交互要更谨慎。
5.2 让 Claude Code 访问手机真实文件的正确姿势
这是手机上跑 Claude Code 的另一个核心问题:它到底能读写哪些目录?权限逻辑其实很简单:Termux 进程能访问什么,Claude Code 就能访问什么。
Termux 的私有目录 $HOME 完全可写可读,这是最安全、最推荐的创作区域。手机公共存储的媒体目录(照片、下载、电影等)在 termux-setup-storage 之后,通过 $HOME/storage 下面的入口访问。比如你想让它处理一张刚下载的图片,路径就是 ~/storage/downloads/xxx.png,注意目录名和 Android 中文语言环境下的"下载"目录一一对应。
Android 应用专属数据目录(比如某些 App 的 cache、files 目录,形如 /storage/emulated/0/android/data/包名/files)默认对 Termux 是不可见的。即使你给了存储权限,Scoped Storage 也会阻止你进入别的应用沙盒目录。我踩过这个坑:当时想让 Claude Code 读一个游戏客户端的日志文件,路径明明存在,ls 就是看不到。最后方案是让那个 App 自己把日志导出到公共 Documents 目录,再让 Claude Code 从这里读。遇到这类需求,通用解决办法是别硬闯,把文件先拷贝到可访问区域再处理。
5.3 结合 termux-api 扩展智能体能力
Termux 的隐藏优势在于能和 Android 原生命力打通。装上 termux-api 包之后,Termux 里出现了一批 termux-* 命令,比如 termux-clipboard-get、termux-battery-status、termux-location。Claude Code 在执行命令时其实可以调用这些命令。这意味着你可以让 Claude Code 在手机端做很多电脑上做不到的事情。
举个例子,我是个待办清单用简文本记的人。让 Claude Code 定期整理我的待办文件时,直接用 termux-clipboard-get 拿到我刚复制的内容写进文件,它就能感知到我当前在关注什么。又比如,让 Claude Code 写一个定时检测内存的小脚本,用 termux-battery-status 返回的数据判断手机要不要开省电模式,纯粹当个 AI 运维官。这些用法超出了"编程助手"的边界,更像是在手机上构建一个个人助理终端。
6. 常见问题与排查技巧实录
6.1 auto-update failed / no write permission to npm prefix
这是我收到私信问得最多的问题,也是在 PC 和部分 proot 环境里最常见的卡点。报错长这样:
Warning: Auto-update failed: no write permission to npm prefix原因很简单:Claude Code 启动时想把自己升级到最新版,但 npm 的全局安装目录对当前用户不可写。在 Termux 标准安装下不会碰到,因为 $PREFIX 在用户可写区域;但如果你之前改过 npm prefix,或者是在 Ubuntu proot 里装的,就会踩雷。
解决办法我前面提过,这里再总结一次优先级:
- 如果你接受固定版本,直接
export DISABLE_AUTOUPDATER=1,一了百了。 - 如果你还是想自动更新,把 npm 全局目录改到用户目录:
npm config set prefix "$HOME/.npm-global" echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc source ~/.bashrc npm install -g @anthropic-ai/claude-code注意改完 prefix 后,旧目录里的包不会自动迁移,需要重新安装。另一个容易忽略的细节是,Termux 里 $PREFIX/bin 下面已经有 claude 的可执行文件了,改 prefix 之后新装的 claude 会出现在 ~/.npm-global/bin,注意 PATH 顺序,别让两个 claude 打架。
6.2 安装慢、更新卡住、显示超时
Termux 的服务器在国内网络环境下,下载时快时慢是完全正常的。解决办法是把 Termux 的包仓库源切换到清华镜像,另外把 npm registry 切到 npmmirror,具体命令前面都给了。还有一个隐性优化:Termux 的 pkg 包默认是从官方 CDN 取的二进制,换源之后不必重新安装旧包,新的 pkg update 会直接命中镜像源。
如果你已经执行过换源但仍旧很慢,也可以考虑开 Termux 自带的部分代理设置,在 termux.properties 里配置 http 代理,但这个依赖于你本身网络环境,我就不展开了。单纯优化镜像源,对大多数读者的改善是最明显的。
6.3 键盘输入错乱、方向键失灵
Claude Code 的交互菜单需要用到大量方向键,手机软键盘上默认是没有方向键的。这时候 Extra Keys 里的上下左右键就是救命稻草。打开方式:音量减 + K 唤出设置面板,勾选 Extra Keys。
还有一种情况是方向键发送的转义序列在 Termux 中被误判为字符输入,表现为按上键冒出几个字母。处理办法在 $HOME/.termux/termux.properties 里加上:
enforce-char-based-input = true然后保存、执行 termux-reload-settings。蓝牙键盘连接时如果还遇到此问题,检查一下输入法是否切到了非 ASCII 模式。
6.4 手机上跑大型项目内存告急
Claude Code 本身是 Node.js 进程,首载内存大概会在 200-400MB,对于现在的旗舰机不算什么,但如果你同时开着 Chrome、微信、游戏,后台压力会很紧张。如果你的手机是 8GB 以下内存,建议使用 Termux 时先把不必要的 App 清掉,或者给 Termux 更宽限的后台白名单。
Claude Code 有时会内存占满直接被杀。观察到的现象是:命令还没跑完,Termux 界面直接消失,重进后发现进程不在了。这多半是系统 LMK(低内存杀手)干的。解决办法是,先保住 Termux 的后台存活:在系统设置里找到 Termux,关闭"省电优化"和"自启动限制",部分国产 ROM 还要在最近任务里给 Termux 上锁。对 16GB 内存的手机用户,这些基本都不是事,但 6GB 内存的老手机还是注意点。
6.5 常见问题速查表
| 问题现象 | 直接原因 | 一句话解法 |
|---|---|---|
| pkg update 404 / 仓库源失效 | Termux 版本过老或源地址过期 | 从 F-Droid 装最新版,换清华源 |
| npm install 卡在 resolving | 网络波动或 registry 不通 | 切换 npmmirror 镜像源 |
| claude: command not found | $PREFIX/bin 不在 PATH | 手动 export PATH |
| 自动更新失败无写权限 | npm prefix 指向只读目录 | 改 prefix 到用户目录,或关自动更新 |
| 读取不到 /storage/emulated/0 下文件 | Scoped Storage 限制 | 用 termux-setup-storage 和 ~/storage 入口 |
| 输入法方向键乱码 | 终端字符编码问题 | 开 enforce-char-based-input |
| Termux 后台被杀 | 系统省电策略 | 应用设置里关闭优化,锁定后台 |
7. 一些使用心得:手机终端的边界与价值
整个流程走通之后,我想分享一点更个人的体会。有人可能会质疑,手机屏幕这么小,跑命令行何必呢。但你去试了就会发现,手机终端带来的不是替代,而是一种"随身开发环境"的确定性——你不用再担心电脑没带、没电、或者想改一行代码还要重新开机。Claude Code 在手机上的意义,恰恰是让"改代码"这个动作被压缩到了锁屏解锁之后的两分钟内。
从技术支持上看,Termux 跑 Claude Code 其实是环境移植 + 运行时依赖 + 权限管理的组合题:F-Droid 版本拿到完整仓库源,pkg 安装 Node.js LTS,npm 全局装包,termux-setup-storage 解决存储,密钥环境变量保存认证,Extra Keys 解决输入,后台白名单解决杀进程。每一个环节拆开看都不复杂,但对第一次在手机上搞开发的人来说,任何一个点踩坑都会卡半天,这也是我写这篇文章的初衷。
我个人的使用习惯是,手机和电脑建立了一个共享的 Notes 文档,凡是需要快速处理的 bug 记录、临时脚本、配置修改,我都直接在 Termux 里交给 Claude Code 处理,处理完再自动同步到电脑的工作仓库。这种"手机先处理,电脑后确认"的节奏,让我越来越依赖这套随身终端。如果你也想让自己的手机变成一个真正的 AI 编程工作站,Termux + Claude Code 这条路值得走一遍。