账号备份与迁移:导入/导出、V1/DB 热迁移
你真正想“备份”的,其实不是配额数字,而是能让账号重新登录的 refresh_token。这节课把 Antigravity Tools 的几种迁移手段讲清楚:导入/导出 JSON、从 state.vscdb 导入、从 V1 数据目录导入,以及自动同步的工作方式。
学完你能做什么
- 把账号池导出成一个 JSON 文件(只包含 email + refresh_token)
- 在新机器上导入这个 JSON,快速恢复账号池
- 直接从 Antigravity/IDE 的
state.vscdb导入“当前登录账号”(支持默认路径与自定义路径) - 从 V1 数据目录自动扫描并导入旧账号
- 了解“自动同步当前账号”到底会做什么、什么时候会跳过
你现在的困境
- 重装系统/换电脑后,账号池要重新加一遍,成本很高
- 你在 Antigravity/IDE 里换了登录账号,但 Manager 里的“当前账号”没跟着变
- 你以前用过 V1/脚本版,手里只有旧数据文件,不知道能不能直接迁移
什么时候用这一招
- 你要把账号池搬到另一台机器(桌面端/服务器/容器)
- 你把 Antigravity 作为“权威登录入口”,希望 Manager 自动同步当前账号
- 你要从旧版本(V1 数据目录)把账号迁过来
🎒 开始前的准备
- 你已经能打开 Antigravity Tools,并至少有一个账号在账号池里
- 你知道账号数据属于敏感信息(尤其是
refresh_token)
安全提醒:把备份文件当作密码
导出的 JSON 文件包含 refresh_token。任何拿到它的人,都可能用它去刷新 access token。不要把备份文件上传到网盘公共链接、不要发群、不要提交到 Git。
核心思路
Antigravity Tools 的“迁移”本质上就两件事:
- 找到可用的
refresh_token - 用它换取 access token,并向 Google 获取真实邮箱,然后把账号写进本地账号池
它提供了三条入口:
- JSON 导入/导出:适合你明确要做“可控备份”
- DB 导入:适合你把 Antigravity/IDE 的登录状态当作权威来源(默认找
state.vscdb,也支持手选文件) - V1 导入:适合从旧数据目录自动扫描并迁移
另外还有一条“自动同步”:它会周期性读取 DB 里的 refresh_token,如果与 Manager 当前账号不同,就自动执行一次 DB 导入;如果相同就直接跳过(节省流量)。
跟我做
第 1 步:导出账号池(JSON 备份)
为什么 这是最稳定、最可控的迁移方式。你拿到一个文件,就能在另一台机器恢复账号池。
操作:进入 Accounts 页面,点击导出按钮。
- 如果你在设置里配置了
default_export_path,导出会直接写入该目录,并使用文件名antigravity_accounts_YYYY-MM-DD.json。 - 如果没配置默认目录,会弹出系统保存对话框让你选择路径。
导出文件内容大致长这样(数组里每项只保留必要字段):
[
{
"email": "[email protected]",
"refresh_token": "1//xxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"email": "[email protected]",
"refresh_token": "1//yyyyyyyyyyyyyyyyyyyyyyyy"
}
]你应该看到:页面提示导出成功,并显示保存路径。
第 2 步:在新机器导入 JSON(恢复账号池)
为什么 导入会逐个调用“添加账号”逻辑,用 refresh_token 拉取真实邮箱并写入账号池。
操作:还是在 Accounts 页面,点击“导入 JSON”,选择你刚导出的文件。
格式要求如下(至少需包含 1 条有效记录):
- 必须是 JSON 数组
- 系统只会导入包含
refresh_token且以1//开头的条目
你应该看到:导入结束后,账号列表里出现导入的账号。
如果你导入时 Proxy 正在运行
每次“添加账号”成功后,后端会尝试 reload 反代的 token pool,让新账号立刻生效。
第 3 步:从 state.vscdb 导入“当前登录账号”
为什么 有时候你不想维护备份文件,只想“以 Antigravity/IDE 的登录状态为准”。DB 导入就是为这个场景准备的。
操作:进入 Accounts 页面,点击 Add Account,切到 Import 标签页:
- 点“从数据库导入”(使用默认 DB 路径)
- 或点“Custom DB (state.vscdb)”手动选择一个
*.vscdb文件
默认 DB 路径是跨平台的(也会优先识别 --user-data-dir 或 portable mode):
~/Library/Application Support/Antigravity/User/globalStorage/state.vscdb%APPDATA%\Antigravity\User\globalStorage\state.vscdb~/.config/Antigravity/User/globalStorage/state.vscdb你应该看到:
- 导入成功后,这个账号会被自动设置为 Manager 的“当前账号”
- 系统会自动触发一次配额刷新
第 4 步:从 V1 数据目录迁移(旧版本导入)
为什么 如果你以前用过 V1/脚本版,Manager 允许你直接扫描旧数据目录并尝试导入。
操作:在 Import 标签页,点击“导入 V1”。
它会去你的 home 目录下找这个路径(以及其中的索引文件):
~/.antigravity-agent/
- antigravity_accounts.json
- accounts.json你应该看到:导入完成后,账号出现在列表里;如果没找到索引文件,后端会返回错误 V1 account data file not found。
第 5 步(可选):开启“自动同步当前账号”
为什么 当你在 Antigravity/IDE 里切换登录账号时,Manager 可以按固定间隔检测 DB 中的 refresh_token 是否变化,并在变化时自动导入。
操作:进入 Settings,开启 auto_sync,并设置 sync_interval(单位:秒)。
你应该看到:开启后会立即执行一次同步;之后按间隔周期性执行。如果 DB 里的 refresh_token 与当前账号相同,会直接跳过,不会重复导入。
检查点 ✅
- 你能在
Accounts列表中看到导入的账号 - 你能看见“当前账号”已经切换到你期望的那一个(DB 导入会自动设为当前)
- 你把 Proxy 启动后,新导入的账号能被正常用于请求(以实际调用结果为准)
踩坑提醒
| 场景 | 你可能会怎么做(❌) | 推荐做法(✓) |
|---|---|---|
| 备份文件安全 | 把导出的 JSON 当普通配置文件随手发出去 | 把 JSON 当密码,最小化传播范围,避免公网暴露 |
| JSON 导入失败 | JSON 不是数组,或 refresh_token 没有 1// 前缀 | 用本项目导出的 JSON 作为模板,保持字段名与结构一致 |
| DB 导入找不到数据 | Antigravity 没有登录过,或 DB 里缺少 jetskiStateSync.agentManagerInitState | 先确认 Antigravity/IDE 已登录,再尝试导入;必要时用 Custom DB 选对文件 |
| V1 导入后账号不可用 | 旧 refresh_token 失效 | 删除该账号后用 OAuth/新 refresh_token 重新添加(以错误提示为准) |
| auto_sync 太频繁 | sync_interval 设得很小,频繁扫描 DB | 把它当作“状态跟随”,间隔设到你能接受的频率即可 |
本课小结
- JSON 导出/导入是最可控的迁移方式:备份文件里只保留
email + refresh_token - DB 导入适合“以 Antigravity/IDE 当前登录账号为准”,并会自动设为 Manager 当前账号
- V1 导入会扫描
~/.antigravity-agent并兼容多种旧格式 - auto_sync 会比较 refresh_token;相同则跳过,不会重复导入
下一课预告
下一课我们把“迁移后的账号池”真正用起来:启动本地反代并接入第一个客户端(/healthz + SDK 配置)。
你会学到:
- 怎么启动/停止 Proxy,并用
/healthz做最小验证- 怎么在 SDK/客户端里配置 Base URL
附录:源码参考
点击展开查看源码位置
更新时间:2026-01-23
| 功能 | 文件路径 | 行号 |
|---|---|---|
Accounts 导出/导入 JSON(save_text_file / read_text_file) | src/pages/Accounts.tsx | 458-578 |
| Dashboard 导出账号 JSON | src/pages/Dashboard.tsx | 113-148 |
| Import 标签页:DB 导入 / Custom DB / V1 导入按钮 | src/components/accounts/AddAccountDialog.tsx | 491-539 |
| 添加账号:忽略前端 email、用 refresh_token 获取真实邮箱、自动刷新配额、Proxy 热 reload | src-tauri/src/commands/mod.rs | 19-60 |
| --- | --- | --- |
DB 导入:从 state.vscdb 提取 refresh_token(ItemTable + base64 + protobuf) | src-tauri/src/modules/migration.rs | 192-267 |
| --- | --- | --- |
| DB 导入后自动设为“当前账号”并刷新配额 | src-tauri/src/commands/mod.rs | 495-511 |
| auto_sync:比较 refresh_token,相同直接跳过;变化则触发 DB 导入 | src-tauri/src/commands/mod.rs | 532-564 |
前端后台任务:按 sync_interval 周期性调用 syncAccountFromDb() | src/components/common/BackgroundTaskRunner.tsx | 43-72 |