Android 端 · 零依赖 · 本地运行

让只认 Anthropic 协议 的客户端,
用上任意 OpenAI 兼容 后端

CCProxy 是一款跑在手机上的协议转换器。它在本地起一个 HTTP 服务, 把 /v1/messages 请求翻译成 OpenAI 格式转发出去,再把结果翻回 Claude 格式。 客户端一个字节都不用改。

Claude 客户端
POST /v1/messages
CCProxy
127.0.0.1:8799
任意 OpenAI 兼容网关
POST /v1/chat/completions
Features

协议翻译,做全做对

不是简单的字段改名。工具调用、流式事件、多轮对话状态机,每一项都按两边协议的语义对齐。

双向协议转换

请求侧:system 提位、content 数组降级、 image 转 image_url、 input_schema 转 parameters。 响应侧:finish_reason 双向映射,token 计数对齐。

工具调用完整支持

tool_use ⇄ tool_calls 双向映射, tool_result 转独立 role:"tool" 消息, 空名调用自动剔除。多轮工具往返不会断链。

块状流式输出

不是逐字蹦,也不是憋完再说。攒够设定字符数或超时即发一个 text_delta,形成连续而稳定的吐字节奏,可调粒度。

HTTPS 双档策略

strict 走标准证书校验; lenient 信任自签证书但保留主机名校验。 不提供"全放行",因为那会把密钥暴露给中间人。

只监听本机回环

服务绑定在 127.0.0.1,局域网和公网都摸不到。 所有配置、密钥、请求体都留在你自己设备上。

零第三方依赖

不用 OkHttp、不用 Gson、不引入 AndroidX。HTTP 服务器自己手写 ServerSocket,JSON 用系统内置 org.json。包体小,行为可控。

Getting Started

四步跑起来

不需要 root,不需要改客户端。装好、填三个框、点启动、把客户端指过来。

1

安装并打开 CCProxy

安装 APK 后打开应用。首次启动会请求通知权限,用于显示前台服务常驻状态。

2

填写上游信息

主界面有三个必填项。Base URL 填到 /v1 为止即可,多填的 /chat/completions 会被自动剥掉。

// 示例:本机网关 Base URL http://127.0.0.1:8765/v1 API Key wb-local 模型名 glm-5.3
3

保存配置并启动

先点「保存配置」,再点「启动转换器」。状态变绿、通知栏出现常驻通知即表示服务已在 127.0.0.1:8799 监听。

4

把客户端指过来

在 Claude 客户端里把 API 地址改成 http://127.0.0.1:8799,Key 随便填(由 CCProxy 转发时替换成上游 Key)。

Specifications

技术规格

轻量、直接、可预期。以下为构建与运行环境。

最低系统版本
Android 8.0API 26
目标 SDK
34Android 14
监听地址
127.0.0.1:8799仅本机回环
第三方依赖
0纯系统 API
实现语言
KotlinJVM,无 NDK
协议
HTTP / HTTPS支持上游 TLS

下载 CCProxy

下载后直接安装。若系统提示"未知来源",在安装界面允许即可—— 这是所有非应用商店 APK 的通用流程。

下载 CCProxy_1.0.0.apk
正在检查文件…
这个地址上暂时还没有安装包。
如果你是站点维护者:把 CCProxy_1.0.0.apk 放到 Pages 项目根目录(与 index.html 同级)后重新部署即可,页面会自动检测到。
版本 1.0.0 体积待填 Android 8.0+
FAQ

常见问题

为什么需要协议转换?不能直接改客户端?
Claude 系客户端发的是 Anthropic 的 /v1/messages 协议,而绝大多数自建网关和模型服务提供的是 OpenAI 的 /v1/chat/completions。 两者在字段名、消息结构、流式事件、工具调用格式上都不一样。改客户端意味着重新编译甚至逆向,而中间加一层转换器,两边都不用动。
请求会不会发到别人的服务器?
不会。服务只绑定 127.0.0.1,只有本机进程能连上。请求直接转发到你自己填写的上游地址, 不经任何第三方中转。配置和密钥存在应用私有目录里。
为什么只监听 127.0.0.1,不能局域网访问?
这是刻意的设计。监听 0.0.0.0 会让同网络的任何设备都能调用你的接口,而你填在上游配置里的密钥也就跟着暴露了。 如果确实需要跨设备使用,建议自行加一层带认证的反向代理,而不是把裸服务暴露到局域网。
流式输出有点卡顿 / 吐字不连续?
在设置里调两个参数:min_chunk_chars(每块最少字符数,调小更丝滑)和 max_chunk_wait_ms(最长等待毫秒数,调小更及时)。 也可以把 stream_mode 设为 off 关闭分块细化——注意这只影响吐字节奏,仍会以 SSE 返回,不会让客户端卡住。
上游用的是自签证书,连不上怎么办?
把 TLS 模式从 strict 改成 lenient。该模式信任任何证书,但依然校验主机名, 不是完全放行。如果你的上游是公网 HTTPS 且证书正常,保持 strict 即可。
应用被系统杀掉怎么办?
CCProxy 使用前台服务并申请了部分唤醒锁,正常情况下不会被回收。如果仍被清理, 请在系统设置里把本应用的电池优化设为「不限制」,并允许后台活动。
日志在哪里看?
运行日志同时写入 logcat 和外部存储的 ccproxy-android.log。 排查连接问题时,先确认日志末尾出现监听成功的那一行,再看请求是否到达。