在 Android 手机上原生运行 OpenChamber(OpenCode 的 Web 界面),无需电脑、无需 root。
首页:本机服务与项目文件夹 · 在手机上打开 OpenChamber · 从通知直接进入会话
AndChamber 在应用私有存储里用 PRoot 搭建一个 Alpine Linux 用户空间,在其中安装并运行 OpenChamber 与 OpenCode,再用全屏 WebView 打开本机的 OpenChamber。也可以连接电脑上运行的 OpenChamber 服务器。
Important
AndChamber 是独立的开源项目,与 OpenChamber、OpenCode 官方无关。模型与服务的认证、调用由 OpenCode 及你配置的服务商负责,AndChamber 不提供任何模型服务。
- 本机运行:首次设置时自动下载 Alpine Linux,安装 Node.js、Git、ripgrep 等工具,再安装 OpenChamber 和 OpenCode;之后一键启动。
- 打开即用:设置完成后,点开 App 直接进入本机 OpenChamber;服务未运行时会自动启动。
- 自动登录:本机服务使用随机生成的 UI 密码,App 自动登录,不需要手动输入。
- 后台常驻:运行时在前台服务中运行,切到后台也不会断;服务异常退出时自动重启。
- 公共目录(可选):项目和 OpenCode 配置放在
/sdcard/AndChamber/,可以用文件管理器或通过 USB 在电脑上维护;会话数据库、登录凭据、插件依赖仍留在私有目录。 - 系统通知与快捷回复:App 在后台时,OpenChamber 的完成、出错、提问、权限请求等通知会以 Android 通知送达;可以直接在通知上回复、允许/拒绝权限、回答简单问题,点通知直接进入对应会话。AndChamber 自身的运行错误也会通知。
- 中英双语:界面跟随系统语言显示中文或英文。
- 远程服务器:添加电脑上 OpenChamber 的地址即可连接;明文 HTTP 需要手动确认。
- 终端可用:
node-pty在设备上针对 musl 重新编译,OpenChamber 的终端功能正常可用。 - 手机操控(实验,默认关闭):Android 11+ 可在原生页面确认一个应用、任务范围和短时授权,通过本机
andchamber_phone工具操作;支持通知内配对、暂停/接管、结果未知不重放。仅适用于可信本机运行时,当前输入限已声明的 ASCII 子集。见功能边界与模拟器验证。 - 跨 App 进展浮窗(可选):另行开启系统浮窗权限并测试可达后,可用吸边胶囊跟进原生事件与代理说明、随时接管或展开任务面板;通知保留,继续操作仍需原生重新确认。浮窗、配对与控制授权彼此独立。
| 项目 | 要求 |
|---|---|
| Android | 8.0(API 26)及以上 |
| 本机运行 | arm64-v8a 或 x86_64 设备(x86_64 已通过模拟器探针验证,见 docs/testing-x86-runtime.md;未在实体 x86_64 设备上验证) |
| 其他架构 | 只能连接远程服务器 |
| 存储空间 | 约 1.2 GB(下载 + 安装) |
| 网络 | 首次设置需要能访问 Alpine 软件源与 npm,建议使用 Wi-Fi |
| WebView | 内嵌页面需要系统 WebView 支持多 Profile(MULTI_PROFILE)。不支持或绑定失败时,页面会提示更新 WebView 提供程序(Android System WebView 或 Chrome) |
从 Releases 下载 AndChamber-<版本>.apk 并安装。每个 APK 都附带 .sha256 校验文件。
- 内嵌页面依赖 WebView 多 Profile:本机和远程服务器的页面都要求 WebView 支持
MULTI_PROFILE。不支持时不会退回到共享 Cookie,页面不加载,本机后台服务、首页和通知仍可使用。 - 远程服务器可在外部浏览器打开:不支持内嵌时,可以用“在浏览器中打开”打开格式有效的已保存地址,不会附加密码、Cookie 或令牌。
- 升级后可能需要重新登录:每个服务器使用独立的 WebView Profile,新 Profile 首次打开时可能要求登录。服务器配置、密码和旧网页数据会保留,不会被清理或迁移。
- 原生下载跟随应用进程:下载在应用运行期间进行,进程被杀后不会断点续传或自动恢复。
- 发送结果不确定时请先核对:通知回复或权限操作返回超时、中断等不确定结果时,应用不会自动重发,请先打开会话确认,再决定是否手动重新发送。
- 跨源导航交给外部浏览器:作为顶层导航处理的跨源链接仍在浏览器打开;已经进入应用下载器的请求则遵循下载凭据隔离规则。
- 打开 App,在“ON THIS PHONE”卡片中点 Set up。安装大约需要 5~10 分钟,期间可以切到后台。
- 安装完成后会自动启动,点 Open 进入 OpenChamber。以后点开 App 会直接进入。
- 在 OpenChamber 中配置模型服务商(Settings → Providers),开始使用。
- 在 OpenChamber 中按返回:先在网页内后退,退到底后 App 回到后台,服务继续运行。
- 想回到 AndChamber 首页:点屏幕右侧边缘的小把手,选择 Home。
- 首页的 Details 中可以关闭“Open OpenChamber when the app starts”。
在首页打开“手机操控”,阅读风险后手动开启。已运行的 OpenChamber 需要由你返回首页重启才会加载工具,应用不会静默中断现有任务。配对与连接是不同步骤,连接成功也不会授予控制权;每个任务仍需原生确认。处理登录等敏感内容前,请选择“我来操作”或返回 AndChamber。
已覆盖 API 35 / x86_64 模拟器;未验证 arm64 真机、厂商后台策略或任意第三方业务。普通暂停只阻止新修改,接管/返回宿主/结束任务会连同观察权限一起撤销。当前不支持中文输入、密码输入或自动提交,不能把工具回执当成业务完成。
在首页的“Projects and settings folder”卡片中开启,并授予“所有文件访问”权限,然后按提示重启服务。
/sdcard/AndChamber/
├── projects/ → Linux 中的 ~/projects(服务器默认工作目录为 ~)
├── opencode/ → OpenCode 全局配置目录(opencode.json(c)、AGENTS.md、skills/、agents/、commands/ 等)
└── README.txt
- 私有目录
~/projects-private始终可用,适合需要符号链接、node_modules或可执行权限的项目(共享存储不支持这些)。 - 关闭公共目录时,
~/projects指向私有目录,不再挂载~/projects-private。 ~/projects中的 Git 仓库可以正常使用:AndChamber 会为公共存储配置 Git(不创建符号链接、不保留可执行权限位);可执行脚本请用sh script.sh运行。opencode/里的service.json、node_modules/是私有数据的挂载占位,请不要修改或删除。- 开启公共目录后,其他拥有“所有文件访问”权限的 App 也能读取该目录,请不要在配置文件中直接写入 API Key。
| 组件 | 版本 | 来源 |
|---|---|---|
| Alpine Linux minirootfs | 3.24.1 | dl-cdn.alpinelinux.org,SHA-256 固定 |
| Node.js | 24.x | Alpine nodejs 包 |
| OpenChamber | 2.4.0 | npm @openchamber/web |
| OpenCode | 2.0.32 | npm @opencode/cli(musl 版本) |
| PRoot | 5.1.107.98 | 源码构建:固定版本源码归档,SHA-256 校验,编译为 jniLibs(与 talloc、libandroid-shmem 一起随 APK 分发) |
需要 JDK 17、Android SDK(Command-line Tools latest、platform 35、build-tools 35、NDK 29.0.14206865)、Python 3.12 及以上,以及宿主工具 make、patch、awk、sh、tar、xz、gzip、bzip2。原生库(PRoot、talloc、libandroid-shmem)从锁定的源码归档编译,不再从 Termux 软件包提取。
export ANDROID_HOME=$HOME/Android/Sdk
# 安装 NDK(一次性)
"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" "ndk;29.0.14206865"
# 1. 准备原生源码(联网,Gradle 构建之前执行)
python3 scripts/prepare_android_runtime_sources.py --output-dir build/runtime-sources
# 2. 构建与测试(原生编译离线运行,Maven、Google 与 JitPack 依赖仍需网络)
./gradlew :app:testDebugUnitTest :app:assembleDebug
# 输出:app/build/outputs/apk/debug/app-debug.apk
python3 -m unittest discover -s scripts/tests -p 'test_*.py' # 构建脚本的离线测试详细步骤、宿主工具检查与实验性说明见 docs/fdroid-source-build.md。
Release 签名通过环境变量启用:ANDCHAMBER_KEYSTORE_FILE、ANDCHAMBER_KEYSTORE_PASSWORD、ANDCHAMBER_KEY_ALIAS、ANDCHAMBER_KEY_PASSWORD。四个变量都提供时才会签名。
推送 v* 标签会触发 GitHub Actions 构建签名 APK 并发布 Release。发版前先在 gradle.properties 中修改 andchamber.versionName(如 0.0.8)和 andchamber.versionCode(如 8),两者须与标签一致;标签格式为 vMAJOR.MINOR.PATCH,其中 MINOR 与 PATCH 须在 0–99 之间,版本号按 MAJOR×10000 + MINOR×100 + PATCH 计算。工作流会在构建前核对两个值,不一致则失败。
app/src/main/java/io/andchamber/app/
├── runtime/ 运行时:安装器、PRoot 命令、OpenChamber 进程、看门狗、共享存储
├── service/ 前台服务与唤醒锁
├── data/ 远程服务器存储、WebView 自动登录
├── di/ Koin 依赖注入
├── phone/ 实验手机操控:原生 ADB、受控工具通道、任务授权与通知
└── ui/ Compose 界面:首页、WebView、启动流程、主题
runtime_tools/, scripts/ 构建时准备 PRoot 原生库
- PRoot 运行时管线、校验下载、环境原子切换等代码移植自 AndCode(MIT)。
- 图标基于 OpenChamber 的立方体标志重新绘制。
- 运行时下载的 OpenChamber、OpenCode、Alpine Linux、PRoot 等软件遵循各自的许可证,详见 NOTICE。
本项目以 MIT 许可证 发布。


