Skip to content

容器与镜像 ​

AiCode 中 AI 执行命令的环境称为「容器」,入口在「设置 → 容器与镜像」。列表为单选,选中的容器即 AI 命令执行、文件读写与终端所在的环境。

后端分两类,二者必选其一:本地容器(在手机上运行 Linux 系统)与远程 SSH(在远程服务器上运行,见远程 SSH 模式)。

容器列表 ​

每行是一个容器配置,名称后附来源标记:内置、自定义、SSH。

三种操作对各类容器均适用:

  • 编辑:行尾铅笔图标。
  • 重置:编辑弹窗右上角刷新图标。此为破坏性操作,会删除容器内已安装的工具与配置,需二次确认;确认后正在运行的 AI 会话与所有终端标签都会关闭。内容较多的大型容器删除可能耗时数十秒,期间显示「正在清理容器数据」及已清理项数,完成后自动关闭,界面不阻塞。
  • 删除:行上左滑露出红色删除按钮。删除本地镜像会一并清理其 rootfs 释放空间(同样显示清理进度);删除远程 SSH 仅删除配置,不影响服务器数据。

内置 Alpine 也可删除。全部删除后列表显示空态,可一键恢复内置 Alpine,无需担心误删。

容器运行后,App 会自动识别其系统类型,在列表左侧显示对应图标(支持 Alpine、Ubuntu、Debian、CentOS),无法识别则显示默认图标。

内置 Alpine 容器 ​

App 自带 Alpine 镜像,首次启动时自动加入列表并选中,shell 路径已自动配置,无需额外设置。

首次使用需进入终端完成初始化

本地容器的环境准备(解压 rootfs 及安装基础工具)在首次进入终端页面时触发。首次使用请先进入终端完成初始化,之后 AI 命令执行、Git 管理与本地 MCP 才能正常使用。

首次进终端的初始化菜单 ​

无论内置 Alpine 还是自行导入的镜像,rootfs 解压完成后首次进入终端都会弹出初始化菜单,含四个选项:

1. 自动安装依赖(推荐)

列出待装项(bash、curl、ripgrep、git 等基础工具,以及 Node.js 和 Python 3),输入 y 确认后选择软件源并开始安装。

2. 环境安装

打开「环境安装」菜单,按场景选择开发环境(见下节)。场景是一组运行时的组合,选定后确认清单即可安装;菜单中也提供「自定义安装」,可逐项勾选并指定主版本。

3. 手动安装(不再提示)

跳过安装,此后进入终端不再弹出该菜单,工具自行安装。如需恢复菜单,重置容器即可。

4. 退出

本次不安装,下次进入终端仍会提示。

安装失败不影响进入 shell,重新进入终端可再次尝试。

软件源选择 ​

换源时可选择:

  • 1) 自动探测(推荐):实测各镜像源在当前包管理器下的可达性,自动跳过失效或被墙的源。
  • 2~6) 指定镜像源:华为云、清华 tuna、中科大 ustc、腾讯云、阿里云。
  • 0) 不换源,保持默认。

换源前会备份原配置,失败自动恢复,不影响后续安装。内置 Alpine 的 rootfs 保持官方源,需要国内源时在此菜单切换。

随时安装开发依赖(aicode) ​

初始化菜单仅在首次进入终端时弹出一次。之后如需安装其他运行时(例如 Java 或 Go),在终端执行命令 aicode 即可打开「环境安装」菜单。

aicode 按场景安装,选定场景并确认清单即可:

场景安装内容
通用开发基础工具 + Node.js + Python 3
Python 开发基础工具 + Python 3 + pip
Node.js / 前端开发基础工具 + Node.js + npm
Kotlin / Android 开发基础工具 + JDK 17 + Android SDK
Flutter 开发基础工具 + JDK + Android SDK + Flutter SDK
Java 开发基础工具 + JDK
Go 开发基础工具 + Go
Rust 开发基础工具 + rustc + cargo
PHP 开发基础工具 + PHP + Composer
仅基础工具bash、curl、ripgrep、git

基础工具(bash、curl、ripgrep、git)在任何场景下都会安装。场景默认安装软件仓库的最新主版本;如需指定版本,使用菜单中的「自定义安装」逐项勾选。菜单中还支持单独换软件源、查看已安装的运行时。

「Kotlin / Android 开发」与「Flutter 开发」属重场景:会从国内镜像下载 JDK、Android SDK(含 build-tools、platform-tools)及 Flutter SDK,耗时较长、占用存储较多。建议在 Debian / Ubuntu 镜像中安装(内置 Alpine 因使用 musl libc 需额外处理);ARM64 设备会自动替换为可执行的 aapt2 等原生二进制。注意 ARM64 容器仅能构建 Flutter debug APK,release 包需通过远程构建。安装完成后,新开终端会自动带上 JAVA_HOME、ANDROID_HOME 等环境变量,具体编译步骤见「进阶教程」中的《在容器中编译 Android 应用》《在容器中编译 Flutter 应用》。

终端右上角的设置图标打开终端设置面板,可调整配色主题、字号、字体与光标样式。

自定义镜像 ​

内置 Alpine 可满足多数场景。如需 Debian / Ubuntu,或预装特定工具链的环境,可自行添加镜像,有两种方式。

方式一:内置镜像下载(推荐) ​

  1. 打开「设置 → 容器与镜像」,点击右上角下载图标。
  2. 页面列出可下载的镜像(Alpine、Ubuntu、Debian 等),点击一行查看详情并下载。
  3. 右上角可切换下载源(官方源 / 华为云 / 阿里云 / 腾讯云),国内网络建议选国内源。
  4. 下载完成后点击「导入」,镜像加入容器列表,选中即可使用。

已下载的镜像可重复导入;左滑可删除已下载的镜像文件。

方式二:手动导入镜像文件 ​

需要特定版本或发行版时,可自行准备 rootfs 镜像导入。

镜像要求:

  • 压缩格式:.tar.gz、.tgz、.tar.xz、.txz
  • 内容须为完整的 Linux rootfs(文件系统根目录,包含 /bin/sh 或其它 shell)
  • 架构须与设备匹配:ARM64 设备用 aarch64 镜像,x86 设备用 x86_64 镜像

镜像来源:

  • Alpine(体积小、启动快):https://alpine.linuxhub.cn/alpine/edge/releases/,在 aarch64 目录下选 alpine-minirootfs-*-aarch64.tar.gz
  • Ubuntu:https://cdimage.ubuntu.com/ubuntu-base/releases/,选 ubuntu-base-*-base-arm64.tar.gz
  • Debian:可从 Docker Hub 官方镜像(如 arm64v8/debian)导出

具备 Docker 环境时,可从任意镜像导出 rootfs:

bash
docker pull debian:bookworm
docker create --name temp-rootfs debian:bookworm
docker export temp-rootfs | gzip > debian-rootfs.tar.gz
docker rm temp-rootfs

也可在已有 Linux 环境中用 debootstrap(Debian / Ubuntu)或 alpine-make-rootfs(Alpine)自行制作。

导入步骤:

  1. 打开「设置 → 容器与镜像」,点击右上角 +,选「本地镜像」。
  2. 填写配置:
    • 名称:镜像配置的别名。
    • shell 路径:容器内 shell,如 /bin/sh 或 /bin/bash。
    • 镜像文件:选择准备好的 rootfs 文件。保存时会复制一份到 App 私有目录,此后重置容器均从该副本重新解压,不依赖原始文件;删除镜像时副本一并清理。
    • 挂载(可选):将手机目录挂进容器,见下文「把手机目录挂给 AI 用」。
    • proot 参数(可选):逐项添加,原样追加到 PRoot 启动参数。
    • 环境变量(可选):注入容器内进程的键值对。
  3. 保存后在列表中选中该配置,即切换为自定义容器。

首次使用自定义镜像时 App 会解压 rootfs 到私有目录,耗时取决于镜像大小。自定义镜像默认不配置国内软件源,可在首次进入终端的初始化菜单中切换。

常见问题排查 ​

安装软件报错:由容器内硬链接不可用导致。编辑镜像 → proot 参数 → 添加 --link2symlink → 保存,重新进入终端。使用内置下载功能导入的镜像已默认带有该参数。

方向键显示为 ^[[A:当前 shell 为 sh,不支持行编辑。编辑容器,将 Shell 改为 /bin/bash,即可获得方向键、历史记录与补全。

把手机目录挂给 AI 用 ​

AI 运行在容器内,默认只能看到工作区,无法访问手机公共存储。如需访问,需将手机目录挂进容器:

  1. 确认存储权限已授权。首次使用时会弹出权限请求;若此前拒绝过,前往系统设置 → 应用 → AiCode → 权限 → 存储 开启。
  2. 打开「设置 → 容器与镜像」,编辑当前使用的容器。
  3. 在「挂载」中添加一条:本地目录填手机上的路径(如 /sdcard/Download),容器目录填容器内路径(如 /mnt/Download)。
  4. 保存后重启终端会话,AI 即可通过容器内路径访问。

按需挂载

仅挂载需要的子目录,不要直接挂载整个 /sdcard——那会将手机中所有文件暴露给 AI,存在隐私泄露风险。

例:如需让 AI 查看 App 日志,将本地目录 /storage/emulated/0/Android/data/com.aicode/ 挂到容器 /mnt/aicode,即可读取 /mnt/aicode/files/logs/ 下的日志。注意 Android/data/ 下只能访问 AiCode 自身的目录,其他应用的目录受分区存储限制无法访问。

如需处理的仅为单个文件,更简便的方式是将其复制进工作区,AI 默认即可访问。

全部删除后的行为 ​

即使删除所有容器(包括内置 Alpine),App 仍可正常使用——AI 执行命令时会回退到内置 Alpine 作为默认执行环境。重新打开「容器与镜像」页,可在空状态页面一键恢复内置 Alpine 或添加新镜像。

基于 GPL-3.0 协议开源