前言
ZwiftOffline是一个开源社区自制的 Zwift 的 server 端,可以在没有网络的情况下进行 Zwift 课程或路线训练,多平台支持。
本教程将详细介绍如何在 Windows 系统上安装和配置 Zwift 单机版,包括基础安装、账号配置、Strava 同步、训练课程上传以及移动端 Companion 配置等完整流程。
一、准备工作
1.1 下载必要文件
ZwiftOffline 主程序
- 从GitHub Release 页面下载最新的 zoffline 发布版(
.exe文件)
- 从GitHub Release 页面下载最新的 zoffline 发布版(
配置辅助工具
- 从GitHub Release下载
zoffline-helper.zip配置脚本文件
- 从GitHub Release下载
Zwift 官方客户端
- 前往Zwift 官网,拉到页面底部,下载并安装 Zwift 软件
- 重要:记住安装路径,后续配置需要用到(例如:
C:\Program Files (x86)\Zwift)
1.2 创建运行目录
创建一个目录用于存放 ZwiftOffline 相关文件,例如新建zwiftoffline目录。
二、基础安装与配置
2.1 初始化 ZwiftOffline
- 将下载的
zoffline.exe文件保存到zwiftoffline目录 - 运行
zoffline.exe,程序会在同目录下自动创建storage目录(用于保存 Zwift 进度) - 看到
storage目录生成后,按Ctrl+C关闭 zoffline,稍后进行配置
2.2 安装并更新 Zwift 客户端
- 运行刚安装的 Zwift 程序,客户端会开始更新游戏本体
- ⚠️ 重要提示:必须在配置网络之前完成此步骤,因为后续配置会修改 hosts 文件,导致无法连接到 Zwift 服务器下载游戏本体
2.3 配置网络连接
- 将下载的
zoffline-helper.zip解压到zwiftoffline目录 - 进入
zwiftoffline/zoffline-helper目录 - 右键点击
configure_client.bat,选择以管理员身份运行 - 脚本会自动配置 zoffline,期间会弹窗让你选择 Zwift 安装目录(即之前记住的路径)
- 配置完成后,会显示如下结果:
2.4 启动并验证
- 进入
zwiftoffline目录,双击运行zoffline.exe(文件名可能因版本而异,如zoffline_1.0.140279.exe)
- 启动原版 Zwift 程序,检查登录界面
- 成功标志:显示 ZwiftOffline 的登录页面(如下图)
- 失败标志:如果显示官方原版登录界面,说明配置失败
- ⚠️ 重要提示:
- 如果显示的是原版登录页面,检查是否开启了代理,关闭代理后重试
- 将输入法切换为微软英文输入法,点击
Start Zwift开始游戏 - 使用搜狗输入法等第三方输入法可能会卡在登录页面
三、高级配置
3.1 同步原有账号信息
如果不配置此项,使用 Zwift offline 时会显示为新账号,而不是你原来的账号信息。
配置步骤:
- 在登录页面点击设置按钮进入设置界面
- 填写你的 Zwift 邮箱和密码,勾选所有选项,点击 Submit 提交
- 配置完成后,再次登录 Zwift 时就会显示为原来的账号了
3.2 配置 Strava 自动上传
3.2.1 申请 Strava API
- 登录Strava API 设置页面
- 创建新应用,填写以下信息:
- 应用名称:自定义(如:ZwiftOffline)
- 类别:其他
- 授权回调域:
launcher.zwift.com - 网站:可留空或填写个人网站
- 申请完成后,记录下
Client ID和Client Secret
3.2.2 在 ZwiftOffline 中配置 Strava
- 在登录页面进入设置,填写
Client ID和Client Secret
点击Submit提交:
3.2.3 授权 Strava 访问
这一步可以省略,如果通过上面的步骤没法上传,再尝试这个步骤手动配置
右键以管理员身份运行
zoffline-helper/disable_zoffline.bat,清除 hosts 配置在命令行中运行以下命令(替换
CLIENT_ID和CLIENT_SECRET为你的实际值):zoffline-helper/strava_auth.exe --client-id CLIENT_ID --client-secret CLIENT_SECRET浏览器会自动打开或手动访问
localhost:8000进行授权
- 授权完成后,将生成的
strava_token.txt文件移动到storage/1目录下 - 右键以管理员身份运行
zoffline-helper/configure_client.bat,重新配置 hosts
3.3 上传自定义训练课程
如果你习惯在 Intervals ICU 等平台创建训练课程,可以手动上传到 Zwift 单机版。
上传步骤:
将你的
.zwo训练课程文件保存到以下目录:Documents/Zwift/Workouts/1
- ⚠️ 注意:不是
zwiftoffline\storage\1\customworkouts目录,如果放错位置会导致课程无法上传
3.4 配置 Garmin Connect
Garmin Connect 可以同步你的 Zwift 活动数据到 Garmin 设备。
3.4.1 配置账号
PC 端配置
- 在 ZwiftOffline 登录窗口点击"Settings - Garmin"按钮
- 输入你的 Garmin Connect 账号和密码
安卓端配置
- 访问
https://<zoffline_ip>/garmin/zoffline/ - 输入你的 Garmin Connect 账号和密码
- 将
<zoffline_ip>替换为运行 zoffline 的电脑 IP 地址
- 访问
3.4.2 多因素认证(MFA)
如果你的账号启用了多因素认证,需要额外配置:
使用 Python 脚本(推荐)
- 运行
garmin_auth.py脚本 - 脚本会在运行目录下生成
garth文件夹 - 将
garth文件夹移动到storage/1目录下
- 运行
使用 Windows 可执行文件
- 如果未安装 Python,可以从zoffline-helper Release 页面下载
garmin_auth.exe - 运行
garmin_auth.exe,同样会生成garth文件夹 - 将
garth文件夹移动到storage/1目录下
- 如果未安装 Python,可以从zoffline-helper Release 页面下载
3.5 配置 Intervals.icu
Intervals.icu 是一个强大的训练分析平台,可以同步 Zwift 活动数据。
3.5.1 获取 API 凭证
- 登录 Intervals.icu 设置页面
- 进入"Developer Settings"(开发者设置)部分
- 复制以下信息:
- Athlete ID(运动员 ID)
- API Key(API 密钥)
3.5.2 配置账号
PC 端配置
- 在 ZwiftOffline 登录窗口点击"Settings - Intervals"按钮
- 输入之前复制的 Athlete ID 和 API Key
安卓端配置
- 访问
https://<zoffline_ip>/intervals/zoffline/ - 输入 Athlete ID 和 API Key
- 将
<zoffline_ip>替换为运行 zoffline 的电脑 IP 地址
- 访问
3.6 启用多人游戏
多人游戏功能允许多个用户同时连接到同一个 zoffline 服务器进行骑行。
3.6.1 基本配置
- 在
storage目录下创建multiplayer.txt文件(文件内容为空)
3.6.2 远程服务器配置
如果 zoffline 运行在与 Zwift 客户端不同的 PC 上:
- 在
storage目录下创建server-ip.txt文件 - 文件内容填写运行 zoffline 的 PC 的 IP 地址
- 端口要求:确保以下端口在运行 zoffline 的 PC 上开放:
- TCP 端口:80, 443, 3025
- UDP 端口:3024
3.6.3 创建账号
- 启动 Zwift,创建新账号
- ⚠️ 注意:此账号仅存在于你的 zoffline 服务器上,与官方 Zwift 账号无关
3.6.4 启用密码重置功能(可选)
- 在
storage目录下创建gmail_credentials.txt文件 - 文件内容格式:
<gmail 账号>
<应用密码>
<恢复 URL 主机(可选)>
- 获取应用密码:
- 访问 https://security.google.com/settings/security/apppasswords
- 创建应用密码,允许服务器登录
- 将生成的应用密码填入文件第二行
- 恢复 URL 主机(可选):
- 第三行可以填写恢复 URL 的主机地址
- 如果不填写,将使用服务器 IP 地址作为默认值
3.7 启用 Ghosts(幽灵)
Ghosts 功能可以保存你之前的骑行记录,并在相同路线上显示为"幽灵"与你一起骑行。
3.7.1 启用功能
PC 端
- 在 zoffline 启动器窗口中勾选"Enable ghosts"
安卓端
- 访问
https://<zoffline_ip>/user/zoffline/ - 勾选"Enable ghosts"
- 点击"Start Zwift"保存设置
- 访问
3.7.2 使用说明
- 保存幽灵:当你保存活动时,幽灵会自动保存在
storage/<player_id>/ghosts/<world>/<route>目录下 - 加载幽灵:下次骑行相同路线时,幽灵会自动加载
- 重新编组:在聊天中输入
.regroup命令可以重新编组幽灵
3.7.3 自定义装备
- 在
storage目录下创建ghost_profile.txt文件 - 可以使用
find_equip.py脚本来自动填充此文件
3.8 启用 Bots(机器人)
Bots 功能可以将保存的幽灵转换为持续骑行的机器人,无论你选择什么路线,它们都会继续骑行。
3.8.1 启用功能
- 在
storage目录下创建enable_bots.txt文件 - 可选:文件内容可以包含一个倍数(如:
2表示双倍机器人数量)- ⚠️ 警告:如果机器人数量过多,可能导致性能问题或功能失效
3.8.2 控制命令
在聊天中使用以下命令控制机器人:
.group:编组机器人.groupall:编组所有机器人(包括使用倍数时的重复机器人).autogroup:自动编组(当你改变路线时).autogroupall:自动编组所有机器人.stopautogroup:停止自动编组.disperse:随机化机器人位置
3.8.3 自定义机器人
- 在
storage目录下创建bot.txt文件 - 可以自定义机器人的名称、国籍和装备
- 可以使用
get_pro_names.py脚本来自动填充此文件 - 随机机器人:如果需要随机机器人,可以参考zoffline-bots 仓库
3.9 配置 RoboPacers(机器人配速员)
RoboPacers 是使用功率模拟器保存的幽灵,可以创建完美的循环配速员。
3.9.1 获取 RoboPacers
- 可以从zoffline-bots 仓库下载预制的 RoboPacers
3.9.2 创建要求
要创建可用的 RoboPacer,需要满足以下条件:
- 更新频率:必须使用 1 秒的更新频率录制(默认是 3 秒)
- 循环要求:活动必须从同一位置和速度开始和结束,否则机器人无法平滑循环
- 配置文件要求:
- 必须包含唯一的玩家 ID
- 必须包含路线 ID
- 这样当你加入机器人时,会在交叉路口走相同的转弯
3.9.3 编辑工具
- bot_editor.py 脚本:可以用于修改以下文件:
profile.bin:设置名称、玩家 ID 和路线 IDroute.bin:裁剪多余的点以创建完美循环
3.9.4 创建动态 RoboPacer
要创建动态 RoboPacer(在上坡时增加功率,下坡时减少功率):
- 使用 standalone_power.py 脚本
- 硬件要求:
- 2 个 ANT 适配器
- python-ant
- PowerMeterTx.py
3.10 使用 Bookmarks(书签)
书签功能可以保存你的位置,方便快速跳转到特定地点。
3.10.1 自动保存书签
当你完成活动时,你的最后位置会自动保存为书签。
3.10.2 手动保存书签
在聊天中使用以下命令保存书签:
.bookmark <名称>
例如:.bookmark 起点
3.10.3 使用书签
从书签开始新活动:
- 在主页屏幕选择"Join a Zwifter"
- 选择你想要的书签
传送到书签:
- 使用操作栏上的传送图标
- 选择目标书签进行传送
3.11 启用历史排行榜
历史排行榜功能可以覆盖 60 分钟的实时结果和 90 天的个人记录,显示所有时间的最佳成绩。
3.11.1 启用功能
- 在
storage目录下创建all_time_leaderboards.txt文件(文件内容可以为空)
3.11.2 功能说明
- 排行榜:显示所有时间的最佳成绩,而不仅仅是最近 60 分钟或 90 天的记录
- 荣誉衫:仍然有效期为 60 分钟,但只有在创造新的历史记录时才会授予
3.12 解锁装备
可以解锁特殊装备或所有装备。
3.12.1 解锁特殊装备
- 在
storage目录下创建unlock_entitlements.txt文件(文件内容可以为空) - 这将解锁需要特殊权限的装备
3.12.2 解锁所有装备
- 在
storage目录下创建unlock_all_equipment.txt文件(文件内容可以为空) - 这将解锁所有可用装备
3.13 配置 CDN 代理
CDN 代理功能可以从 Zwift 官方服务器获取地图时间表和更新文件。
3.13.1 启用 CDN 代理
- 在
storage目录下创建cdn-proxy.txt文件(文件内容可以为空) - ⚠️ 限制:此功能只能在 zoffline 运行在与 Zwift 客户端不同的机器上时使用
3.13.2 禁用代理
默认情况下,zoffline 会尝试使用 Google 公共 DNS 来解析 Zwift 主机名,即使 zoffline 与 Zwift 客户端运行在同一台机器上也能工作。
- 如果要禁用此代理功能,在
storage目录下创建disable_proxy.txt文件
3.13.3 从 zoffline 提供更新文件
- 运行
get_gameassets.py脚本下载游戏文件 - 这样 zoffline 可以直接提供更新文件,而不需要从 Zwift 服务器获取
四、移动端 Companion 配置
Zwift Companion 是配套的移动端社交软件,可用于与骑友互动、配对设备、点赞、使用道具等功能。使用离线版 Zwift 需要重新打包 Companion 应用。
4.1 准备工作
官方原版 Companion 会对网络连接和证书做严格验证,需要对其进行"打补丁并重签名"才能连接到本地 zoffline 服务器。
4.2 替换 APK 证书并重新签名
4.2.1 安装 apk-mitm
- 安装 Node.js(如果尚未安装)
- 使用以下命令全局安装 apk-mitm:
npm install -g apk-mitm
- 其他系统可参考apk-mitm 项目 README自行安装
4.2.2 修改 apktool 配置
- 使用
npm root -g查找 apk-mitm 的实际安装路径 - 打开
apk-mitm/dist/tools/apktool.js文件 - 修改
decode方法,添加-resm和dummy参数:
decode(inputPath, outputPath) {
return this.run([
'decode',
'-resm', // add this
'dummy', // add this
inputPath,
'--output',
outputPath,
'--frame-path',
this.options.frameworkPath,
], 'decoding');
}
4.2.3 生成修改后的 APK
从Zwift Offline 仓库下载以下文件:
ssl/cert-zwift-com.pem(证书文件)zwift-offline-companion.apk(原始 APK 文件)
将这两个文件复制到同一目录(如:
C:\Users\Administrator\Desktop\zwift-offline-companion)在该目录下运行以下命令:
apk-mitm --certificate cert-zwift-com.pem zwift-offline-companion.apk
- 命令执行完成后,会生成
zwift-offline-companion-patched.apk文件,将其拷贝到手机安装即可
4.3 配置域名重定向
4.3.1 安装 Virtual Hosts
- 下载virtual hosts软件
- 安装到手机中
4.3.2 创建 hosts 文件
- 创建
hosts.txt文件,内容如下(将<zoffline ip>替换为你运行 zoffline 的电脑 IP 地址):
<zoffline ip> us-or-rly101.zwift.com
<zoffline ip> secure.zwift.com
- ⚠️ 重要提示:如果在 PC 上配置过 hosts 文件,可能包含以下映射:
127.0.0.1 cdn.zwift.com
此映射不要添加到手机端的 hosts 文件中!
- 将
hosts.txt文件复制到手机,放在便于访问的位置
4.3.3 启用域名重定向
- 打开 Virtual Hosts 软件
- 选择之前创建的
hosts.txt文件 - 启用域名重定向功能
4.4 使用 Companion
- 使用离线版的账号登录 Companion,即可正常使用
- 验证连接:在打开和登录 Companion 时,观察 PC 端运行的 Zwift offline 命令行窗口是否有日志输出
- 如果有日志输出,说明连接正常
- 如果没有任何输出,说明请求未成功转发,需要检查 IP 地址配置是否正确
五、安卓设备直接使用 Zwift Offline
除了在 PC 上使用 Zwift Offline,你也可以直接在安卓设备上运行 Zwift 并连接到 zoffline 服务器。这种方式不需要 root 权限,但需要在每次安装或更新 Zwift 后重新打补丁。
5.1 安装必要应用
5.1.1 下载并安装 ZofflineObb
- 从GitHub Release 页面下载
ZofflineObb.apk - 安装到安卓设备上(需要允许安装未知来源应用)
5.1.2 下载并安装 Virtual Hosts
- 从GitHub Release 页面下载
app-Github-release.apk - 安装到安卓设备上
5.2 配置域名重定向
5.2.1 创建 hosts.txt 文件
创建
hosts.txt文件,可以使用文本编辑器应用或在线工具(如在线文本编辑器)文件内容如下(将
<zoffline ip>替换为运行 zoffline 的电脑 IP 地址):<zoffline ip> us-or-rly101.zwift.com <zoffline ip> secure.zwift.com <zoffline ip> cdn.zwift.com⚠️ 注意:与 Companion 配置不同,安卓设备直接使用需要包含
cdn.zwift.com的映射将
hosts.txt文件保存到手机,放在便于访问的位置
5.2.2 关闭 Private DNS
- 进入安卓设备的设置 > 网络和互联网 > 高级 > Private DNS
- 选择关闭或自动
5.2.3 配置 Virtual Hosts
- 打开 Virtual Hosts 应用
- 选择之前创建的
hosts.txt文件 - 启用域名重定向功能(确保按钮处于开启状态)
5.2.4 替代方案:使用 DNS 配置
如果你不想使用 Virtual Hosts 应用,也可以使用以下方法:
- 在运行 zoffline 的 PC 上,在
storage目录下创建fake-dns.txt文件 - 在手机的 Wi-Fi 设置中,将DNS 1设置为运行 zoffline 的 PC 的 IP 地址
- 注意:如果你的路由器支持,也可以在路由器层面配置 DNS 记录,这样所有设备都可以自动使用
5.3 安装并打补丁 Zwift
5.3.1 安装 Zwift
- 从 Google Play 商店安装或更新 Zwift
- ⚠️ 重要:安装或更新后,不要立即启动 Zwift
- 如果已经启动过 Zwift,需要先清除数据:
- 进入设置 > 应用 > Zwift > 存储 > 清除数据
- 或者卸载后重新安装
5.3.2 运行 ZofflineObb 打补丁
- 打开
ZofflineObb应用 - 运行补丁程序(允许访问存储权限)
- 等待补丁过程完成(通常需要 5-10 分钟)
- 补丁完成后,应用会提示完成
原理说明:ZofflineObb 会修改 Zwift 应用,使其接受 zoffline 服务器的自签名证书,这是连接离线服务器的关键步骤。
5.4 运行 Zwift
- 确保 Virtual Hosts 按钮处于开启状态
- 启动 Zwift 应用
- 使用任意邮箱和密码登录,或创建新用户(如果启用了多人游戏功能)
- Zwift 应该能够正常验证下载并运行
5.5 重要提示
- 每次更新后需要重新打补丁:无论是从 Google Play 更新 Zwift,还是重新安装,都需要重新运行 ZofflineObb 打补丁
- 保持网络连接:确保安卓设备与运行 zoffline 的 PC 在同一局域网内
- 防火墙设置:确保 PC 的防火墙允许 zoffline 的端口访问
六、常见问题
6.1 卡在蓝色登录界面
症状: 登录时卡在蓝色界面,无法进入游戏
解决方法:
- 在任务管理器中关闭 Zwift 进程
- 将输入法切换为微软英文输入法
- 重新启动 Zwift 并登录
6.2 配置后无法更新 Zwift
原因: configure_client.bat会修改 Hosts 文件,导致无法连接到 Zwift 服务器
解决方法:
- 关闭正在运行的
zoffline - 进入
zwiftoffline/zoffline-helper目录 - 右键点击
disable_zoffline.bat,选择以管理员身份运行,清除网络配置 - 打开 Zwift 进行更新
- 更新完成后,重新运行
configure_client.bat恢复配置
6.3 无法自动上传活动到 Strava
可能原因及解决方法:
- 检查
strava_token.txt文件是否已正确放置在storage/1目录下 - 确认 Strava API 的
Client ID和Client Secret配置正确 - 检查网络连接,确保 zoffline 可以访问 Strava API
- 查看 zoffline 命令行窗口的错误日志,根据具体错误信息进行排查
- 检查在申请 API 时填写的授权回调域是否正确
6.4 安卓客户端无法登录
可能原因及解决方法:
对于 Companion 应用:
- 检查 Virtual Hosts 是否已正确启用
- 确认 hosts 文件中的 IP 地址是否正确(应为运行 zoffline 的电脑 IP,而非 127.0.0.1)
- 确保手机和电脑在同一局域网内
- 检查防火墙设置,确保 zoffline 的端口未被阻止
- 重新安装修改后的 APK 文件
对于直接使用 Zwift 应用:
- 确认已关闭 Private DNS 设置
- 检查 Virtual Hosts 是否已正确启用,按钮必须处于开启状态
- 确认 hosts.txt 文件包含所有三个域名映射(包括
cdn.zwift.com) - 检查是否在安装/更新 Zwift 后运行了 ZofflineObb 打补丁
- 如果已启动过 Zwift,尝试清除应用数据后重新打补丁
- 确认手机和运行 zoffline 的 PC 在同一局域网内
- 检查 PC 防火墙设置,确保 zoffline 端口未被阻止



















