【教程】如何在手机上跑完整版的claudecode
- 内容介绍
- 文章标签
- 相关推荐
这篇教程(第一次写这种教程 可能写得不好,请见谅)主要面对于没有电脑,想在手机上用claudecode,并且我附上了如何解决API冲突的问题
首先你需要一个终端我这里就使用termux了
然后去这里(在这里十分感谢tmoe大佬)获取一下脚本,然后将脚本输入到termux就可以了,在里面会有一个图形化的界面,在安装的过程中 默认的共享目录就是你手机的下载目录
IMG_20260314_2001131080×819 145 KB
,在这个图形化的界面里面可能会有很多的Linux发行版这个的话
IMG_20260314_2001251080×501 143 KB
我建议你使用Ubuntu,下完之后一般来说就是进入命令行了,按理来说应该为这样(如果你没有装任何美化的话)
IMG_20260314_200443836×186 6.76 KB
如果你的命令行
IMG_20260314_200512826×183 2.12 KB
为这样的话 说明你根本没有进入容器,请输入指令
tmoe
再次进入面板打开容器,安装npm(各个系统都有各个系统的指令,这里以Ubuntu为例)
apt install nodejs npm
等代码跑完之后,之后就是安装claudecode了,
npm install -g @anthropic-ai/claude-code
第一次进入的时候会让你选择使用你的帐号或API,选择第二个选项,以后他会给你个链接让你登录,在网站登录他会给你一个码,复制下来,输入claudecode,然后你就可以使用claudecode了
-
但是官方的话默认是没有额度的,所以这个时候我们就需要切换API以及地址了
-
进入到容器
IMG_20260314_200443836×186 6.76 KB为这样即可,输入指令
nano ~/.bashrc
如果失败的话请先安装nano
pkg install nano
进入界面之后直接在后面输入
export ANTHROPIC_BASE_URL=你的地址
export ANTHROPIC_AUTH_TOKEN=你的API
IMG_20260314_2028381080×240 46 KB
然后CTRL+x(这里指是你输入法上的)退出保存
使用以下指令进入claudecode
claude
进入之后它会有黄字提示你,直接就是
/logout
就可以了,之后他会退出,你只需要再次使用claude指令再次进入就行,基本上就是这个流程,感谢你的阅读
切换模型的话就使用/model
网友解答:--【壹】--:
这是 android 才可以吧。
iPhone 被开除出手机了
--【贰】--:
刚好在研究这个,分享个好玩的用法,通过 termux:api + claufe code hook 可以实现调用手机的通知或者权限确认,挺鸡肋的功能
google 一下 termux:api ,两种方式 1.apk 安装 (需要跟 termux 版本对应) 2. 安装 termux api 的包 pkg install termux-api jq curl
安装完成后就可以让 cc 给你写脚本了同时在 .claude/settings.json 加上 hook 配置,也可以用我已经跑出来的
claude_permission_dialog.sh
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail
input="$(cat)"
cache_dir="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/claude-code-permissions"
mkdir -p "$cache_dir"
session_id="$(jq -r '.session_id // .sessionId // "unknown-session"' <<<"$input")"
tool_name="$(jq -r '.tool_name // .toolName // .permission.tool_name // .permission.toolName // "unknown-tool"' <<<"$input")"
command_text="$(jq -r '.tool_input.command // .toolInput.command // .input.command // .permission.tool_input.command // .permission.toolInput.command // empty' <<<"$input")"
file_path="$(jq -r '.tool_input.file_path // .toolInput.file_path // .input.file_path // .permission.tool_input.file_path // .permission.toolInput.file_path // empty' <<<"$input")"
permission_text="$(jq -r '.permission.description // .permission.reason // .description // .reason // .message // empty' <<<"$input")"
if [[ -n "$command_text" ]]; then
detail="$command_text"
elif [[ -n "$file_path" ]]; then
detail="$file_path"
elif [[ -n "$permission_text" ]]; then
detail="$permission_text"
else
detail="需要执行 $tool_name"
fi
key_source="$session_id|$tool_name|$detail"
key="$(printf '%s' "$key_source" | sha256sum | cut -d' ' -f1)"
cache_file="$cache_dir/$key.allow"
if [[ -f "$cache_file" ]]; then
jq -nc '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:"已按当前会话 允许规则放行"}}}'
exit 0
fi
short_detail="$detail"
if [[ ${#short_detail} -gt 160 ]]; then
short_detail="${short_detail:0:157}..."
fi
title="Claude Code 权限确认 · $tool_name · $short_detail"
values="确认一次,当前会话允许,拒绝"
widget="${CLAUDE_PERMISSION_DIALOG_WIDGET:-sheet}"
choice_json="$(termux-dialog "$widget" -t "$title" -v "$values")"
choice="$(jq -r '.text // empty' <<<"$choice_json")"
index="$(jq -r '.index // -1' <<<"$choice_json")"
case "$choice:$index" in
确认一次:0|确认一次:*)
jq -nc --arg msg "已允许本次 $tool_name" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:$msg}}}'
;;
当前会话允许:1|当前会话允许:*)
printf '%s\n' "$key_source" > "$cache_file"
jq -nc --arg msg "当前会话将自动允许相同的 $tool_name 请求" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:$msg}}}'
;;
拒绝:2|拒绝:*)
jq -nc --arg msg "用户通过 Android 对话框拒绝了 $tool_name" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:$msg}}}'
;;
*)
jq -nc '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:"权限对话框未选择,已拒绝"}}}'
;;
esac
.claude/settings.json
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "termux-toast -g bottom 'Claude Code 执 行完成' >/dev/null 2>&1 || true",
"timeout": 5
}
]
}
],
"PermissionRequest": [
{
"matcher": "Bash|Edit|Write|Read|Grep|Glob",
"hooks": [
{
"type": "command",
"command": "/data/data/com.termux/files/home/project/script/test/claude_permission_dialog.sh",
"timeout": 120
}
]
}
]
}
--【叁】--:
佬是真牛逼,,这样怎么用网络
--【肆】--:
这样在 termux 跑 cc 的话,功能完整吗
--【伍】--:
Termux | F-Droid - 自由来源的 Android 应用存储库
带有软件包的终端模拟器
或者
GitHub - termux/termux-app: Termux - a terminal emulator application for...
Termux - a terminal emulator application for Android OS extendible by variety of packages.
有什么不懂可以问我
--【陆】--:
如果直接跑的话是不完整的,经常会出现指令的缺失,所以说我套了个容器,这样就可以了
--【柒】--:
感谢大佬教程
--【捌】--:
请问佬,第一步说的终端在哪下?
--【玖】--:
手机端termux如果你直接跑的话/tmp这个指令总是用不了,导致我头疼了半天 于是这个教程就出来了
--【拾】--:
佬们太拼了
--【拾壹】--:
感谢,不懂的可以问我,我会尽量帮佬友的
--【拾贰】--:
会有一点,但是不影响使用,所以放心蹬吧
--【拾叁】--:
感谢佬这就试一下,之前一直在想能不能,您已经研究出来了,旧手机该充电了
--【拾肆】--:
没有没有,只是我没那个实力买iPhone 研究不出来呀
--【拾伍】--:
好贴啊佬,赞
termux原生环境有时候经常有些莫名其妙的bug
不过proot性能会不会有损失?想了解一下
--【拾陆】--:
容器里面可以使用的,应该是和手机共用一个
--【拾柒】--:
感谢分享!
--【拾捌】--:
感谢分享~,不过貌似也不用proot容器,原生环境里应该也行的
--【拾玖】--:
感谢佬友分享教程
这篇教程(第一次写这种教程 可能写得不好,请见谅)主要面对于没有电脑,想在手机上用claudecode,并且我附上了如何解决API冲突的问题
首先你需要一个终端我这里就使用termux了
然后去这里(在这里十分感谢tmoe大佬)获取一下脚本,然后将脚本输入到termux就可以了,在里面会有一个图形化的界面,在安装的过程中 默认的共享目录就是你手机的下载目录
IMG_20260314_2001131080×819 145 KB
,在这个图形化的界面里面可能会有很多的Linux发行版这个的话
IMG_20260314_2001251080×501 143 KB
我建议你使用Ubuntu,下完之后一般来说就是进入命令行了,按理来说应该为这样(如果你没有装任何美化的话)
IMG_20260314_200443836×186 6.76 KB
如果你的命令行
IMG_20260314_200512826×183 2.12 KB
为这样的话 说明你根本没有进入容器,请输入指令
tmoe
再次进入面板打开容器,安装npm(各个系统都有各个系统的指令,这里以Ubuntu为例)
apt install nodejs npm
等代码跑完之后,之后就是安装claudecode了,
npm install -g @anthropic-ai/claude-code
第一次进入的时候会让你选择使用你的帐号或API,选择第二个选项,以后他会给你个链接让你登录,在网站登录他会给你一个码,复制下来,输入claudecode,然后你就可以使用claudecode了
-
但是官方的话默认是没有额度的,所以这个时候我们就需要切换API以及地址了
-
进入到容器
IMG_20260314_200443836×186 6.76 KB为这样即可,输入指令
nano ~/.bashrc
如果失败的话请先安装nano
pkg install nano
进入界面之后直接在后面输入
export ANTHROPIC_BASE_URL=你的地址
export ANTHROPIC_AUTH_TOKEN=你的API
IMG_20260314_2028381080×240 46 KB
然后CTRL+x(这里指是你输入法上的)退出保存
使用以下指令进入claudecode
claude
进入之后它会有黄字提示你,直接就是
/logout
就可以了,之后他会退出,你只需要再次使用claude指令再次进入就行,基本上就是这个流程,感谢你的阅读
切换模型的话就使用/model
网友解答:--【壹】--:
这是 android 才可以吧。
iPhone 被开除出手机了
--【贰】--:
刚好在研究这个,分享个好玩的用法,通过 termux:api + claufe code hook 可以实现调用手机的通知或者权限确认,挺鸡肋的功能
google 一下 termux:api ,两种方式 1.apk 安装 (需要跟 termux 版本对应) 2. 安装 termux api 的包 pkg install termux-api jq curl
安装完成后就可以让 cc 给你写脚本了同时在 .claude/settings.json 加上 hook 配置,也可以用我已经跑出来的
claude_permission_dialog.sh
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail
input="$(cat)"
cache_dir="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/claude-code-permissions"
mkdir -p "$cache_dir"
session_id="$(jq -r '.session_id // .sessionId // "unknown-session"' <<<"$input")"
tool_name="$(jq -r '.tool_name // .toolName // .permission.tool_name // .permission.toolName // "unknown-tool"' <<<"$input")"
command_text="$(jq -r '.tool_input.command // .toolInput.command // .input.command // .permission.tool_input.command // .permission.toolInput.command // empty' <<<"$input")"
file_path="$(jq -r '.tool_input.file_path // .toolInput.file_path // .input.file_path // .permission.tool_input.file_path // .permission.toolInput.file_path // empty' <<<"$input")"
permission_text="$(jq -r '.permission.description // .permission.reason // .description // .reason // .message // empty' <<<"$input")"
if [[ -n "$command_text" ]]; then
detail="$command_text"
elif [[ -n "$file_path" ]]; then
detail="$file_path"
elif [[ -n "$permission_text" ]]; then
detail="$permission_text"
else
detail="需要执行 $tool_name"
fi
key_source="$session_id|$tool_name|$detail"
key="$(printf '%s' "$key_source" | sha256sum | cut -d' ' -f1)"
cache_file="$cache_dir/$key.allow"
if [[ -f "$cache_file" ]]; then
jq -nc '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:"已按当前会话 允许规则放行"}}}'
exit 0
fi
short_detail="$detail"
if [[ ${#short_detail} -gt 160 ]]; then
short_detail="${short_detail:0:157}..."
fi
title="Claude Code 权限确认 · $tool_name · $short_detail"
values="确认一次,当前会话允许,拒绝"
widget="${CLAUDE_PERMISSION_DIALOG_WIDGET:-sheet}"
choice_json="$(termux-dialog "$widget" -t "$title" -v "$values")"
choice="$(jq -r '.text // empty' <<<"$choice_json")"
index="$(jq -r '.index // -1' <<<"$choice_json")"
case "$choice:$index" in
确认一次:0|确认一次:*)
jq -nc --arg msg "已允许本次 $tool_name" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:$msg}}}'
;;
当前会话允许:1|当前会话允许:*)
printf '%s\n' "$key_source" > "$cache_file"
jq -nc --arg msg "当前会话将自动允许相同的 $tool_name 请求" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"allow",message:$msg}}}'
;;
拒绝:2|拒绝:*)
jq -nc --arg msg "用户通过 Android 对话框拒绝了 $tool_name" '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:$msg}}}'
;;
*)
jq -nc '{hookSpecificOutput:{hookEventName:"PermissionRequest",decision:{behavior:"deny",message:"权限对话框未选择,已拒绝"}}}'
;;
esac
.claude/settings.json
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "termux-toast -g bottom 'Claude Code 执 行完成' >/dev/null 2>&1 || true",
"timeout": 5
}
]
}
],
"PermissionRequest": [
{
"matcher": "Bash|Edit|Write|Read|Grep|Glob",
"hooks": [
{
"type": "command",
"command": "/data/data/com.termux/files/home/project/script/test/claude_permission_dialog.sh",
"timeout": 120
}
]
}
]
}
--【叁】--:
佬是真牛逼,,这样怎么用网络
--【肆】--:
这样在 termux 跑 cc 的话,功能完整吗
--【伍】--:
Termux | F-Droid - 自由来源的 Android 应用存储库
带有软件包的终端模拟器
或者
GitHub - termux/termux-app: Termux - a terminal emulator application for...
Termux - a terminal emulator application for Android OS extendible by variety of packages.
有什么不懂可以问我
--【陆】--:
如果直接跑的话是不完整的,经常会出现指令的缺失,所以说我套了个容器,这样就可以了
--【柒】--:
感谢大佬教程
--【捌】--:
请问佬,第一步说的终端在哪下?
--【玖】--:
手机端termux如果你直接跑的话/tmp这个指令总是用不了,导致我头疼了半天 于是这个教程就出来了
--【拾】--:
佬们太拼了
--【拾壹】--:
感谢,不懂的可以问我,我会尽量帮佬友的
--【拾贰】--:
会有一点,但是不影响使用,所以放心蹬吧
--【拾叁】--:
感谢佬这就试一下,之前一直在想能不能,您已经研究出来了,旧手机该充电了
--【拾肆】--:
没有没有,只是我没那个实力买iPhone 研究不出来呀
--【拾伍】--:
好贴啊佬,赞
termux原生环境有时候经常有些莫名其妙的bug
不过proot性能会不会有损失?想了解一下
--【拾陆】--:
容器里面可以使用的,应该是和手机共用一个
--【拾柒】--:
感谢分享!
--【拾捌】--:
感谢分享~,不过貌似也不用proot容器,原生环境里应该也行的
--【拾玖】--:
感谢佬友分享教程

