Repository Wiki
BeyondDimension/SteamTools

快速开始

Watt Toolkit(原名 Steam++)是一个开源、跨平台的多功能游戏工具箱,基于 .NET / C# 构建,支持 Windows、Linux、macOS 与 Android 等多端运行。本页是整个 Wiki 的入口页面,帮助新用户完成「下载安装 → 首次运行」以及新开发者完成「环境准备 → 获取源码 → 本地构建」两条路径的上手流程。

Purpose and Scope

本页覆盖以下内容:

  • 终端用户路径:了解 Watt Toolkit 的功能定位、支持的操作系统、下载渠道与安装产物(msix / deb / rpm / pkg / apk 等)。
  • 开发者路径:准备开发环境(IDE、.NET SDK 版本约束)、克隆仓库、理解解决方案(solution)分层结构,并完成本地构建与调试。
  • 仓库导览:src/ 下各目录的职责划分(Common、Lib、Tool、Launch 四大块),以及构建脚本与目标框架(TFM)的组织方式。

以下内容有意留给兄弟页面,本页只做指路不做展开:

  • 各业务功能(网络加速、账号切换、库存游戏、本地令牌、游戏工具)的内部实现,见对应的功能专题页。
  • 客户端启动流程、DI 注册与 MVVM 架构细节,见架构相关页面。
  • 发布产物在各操作系统上的文件目录结构,见 doc/program-file-structure/ 下文档与发布专题页。

Overview

Watt Toolkit 的大部分功能依赖本机安装的 Steam 客户端,核心能力包括(摘自仓库 README):

功能支持平台说明
网络加速Windows / Linux / macOS / Android基于 YARP.ReverseProxy 进行本地反向代理,加速访问游戏网站;并可拦截网络请求向网页注入 JS 脚本
账号切换Windows / Linux / macOS快速切换当前 PC 上登录过的 Steam、Epic、Uplay 等多平台账号,管理 Steam 家庭共享库
库存游戏Windows / Linux / macOS管理 Steam 游戏库存、自定义封面、下载完成定时关机、模拟运行挂时长、云存档管理、成就解锁
本地令牌Windows / Linux / macOS / Android统一管理 HOTP / TOTP / Steam / Google 令牌,支持 Steam 批量确认交易
游戏工具Windows强制游戏窗口无边框化等

README 中明确:全新的 3.0 版本引入自定义插件功能,上述功能均为下载时自带的默认插件,用户可自行删除或禁用——这是 3.x 架构与旧版最大的差异,也是理解源码分层的出发点。

支持的操作系统(来自 README 的运行要求):

  • Windows 11 / Windows 10 版本 1809(内部版本 17763)或更高
  • macOS 10.15 或更高
  • Ubuntu 20.04+、Debian 11+、Fedora 37+、Deepin(UOS) 20+
  • Android 5.0(API 21)或更高(iOS 支持开发中)

对应的构建侧最低平台版本(来自 src/TFM_NETX_WITH_WINDOWS.props):SupportedOSPlatformVersion 中 Windows 为 10.0.17763.0,macOS 为 12.0,Android 为 24.0,iOS/MacCatalyst 为 15.0,Tizen 为 6.5。

Architecture

从仓库根目录与 src/README.md 可以看出,解决方案采用「平台无关核心 + 平台适配层 + UI 框架层 + 启动项」的经典跨平台分层:

Loading diagram...

分层要点与设计意图:

  • Launch(启动项)按发布形态拆分:桌面主程序、MSIX 单项目打包、Desktop Bridge 打包、MAUI 客户端、Android 客户端各自独立成项目,保证每条发布管线只携带所需依赖。FDELauncher 是一个仅用 .NET FX 3.5 编写的启动器,用于在用户未安装 .NET 运行时时给出提示(框架依赖发布场景)。
  • Platforms 是平台差异的唯一落点:Windows/macOS/Linux/Android/iOS 的原生能力(互操作、注册表、钥匙串等)分别封装在 ST.Client.* 平台项目中,上层通过抽象接口调用,避免平台代码渗入业务层。
  • Common 是最底层地基:Common.CoreLib 为全局通用库,Common.ClientLib 及其平台变体面向客户端,Repositories.sqlite-net-pcl 提供本地 SQLite 持久化。拼音库按平台选择不同实现(iOS 用 CFStringTransform,Android 用 TinyPinyin),体现「同一抽象、多实现」的思路。
  • MVVM 目录约定:src/README.md 的命名空间约定中,Application/UI/ViewModels、Application/UI/Views、Application/Services 与 Application/Services/Implementation 明确了「服务接口与实现分离」的组织方式,DI 注册统一放在 ServiceCollectionExtensions.cs,且命名空间统一挂到 Microsoft.Extensions.DependencyInjection,使调用侧无需额外 using。

下载与安装

官方下载渠道

README 列出的分发渠道:

  1. Steam 商店:https://store.steampowered.com/app/2425030
  2. Microsoft 应用商店:https://apps.microsoft.com/store/detail/watt-toolkit/9MTCFHS560NG
  3. 软件官网:https://steampp.net
  4. GitHub 发行版:https://github.com/BeyondDimension/SteamTools/releases
  5. 码云发行版:https://gitee.com/rmbgame/SteamTools/releases
  6. Arch 用户仓库:watt-toolkit-bin(Release 构建)与 watt-toolkit-git(源码构建,可能失败)

详细的下载指引由 doc/download-guide.md 提供(README 中的「下载指南」章节直接指向该文件)。

各平台安装产物

doc/publish.md 明确了发布资产的命名规范(以 Steam++_vx.y.z_... 命名):

平台架构产物
Windowsx64 / x86 / Arm64.msix(商店式安装)与 .7z(解压即用)
Linuxx64 / Arm64.tar.zst、.deb、.rpm
macOSx64 / Arm64.pkg
AndroidArm64.apk
text
1- Windows 2 - x64 3 - Steam++_vx.y.z_win_x64.msix 4 - Steam++_vx.y.z_win_x64.7z 5 - x86 6 - Steam++_vx.y.z_win_x86.msix 7 - Steam++_vx.y.z_win_x86.7z 8 - Arm64 9 - Steam++_vx.y.z_win_arm64.msix 10 - Steam++_vx.y.z_win_arm64.7z 11- Linux 12 - x64 13 - Steam++_vx.y.z_linux_x64.tar.zst 14 - Steam++_vx.y.z_linux_x64.deb 15 - Steam++_vx.y.z_linux_x64.rpm 16 - Arm64 17 - Steam++_vx.y.z_linux_arm64.tar.zst 18 - Steam++_vx.y.z_linux_arm64.deb 19 - Steam++_vx.y.z_linux_arm64.rpm 20- macOS 21 - x64 22 - Steam++_vx.y.z_macos_x64.pkg 23 - Arm64 24 - Steam++_vx.y.z_macos_arm64.pkg 25- Android 26 - Arm64 27 - Steam++_vx.y.z_android_arm64.apk

来源:doc/publish.md

设计意图说明:

  • Windows 同时提供 .msix 与 .7z 两种形态:.msix 走系统级安装(对应源码中的 ST.Client.Avalonia.App.MsixPackage 与 Desktop Bridge 打包项目),.7z 面向绿色便携用户。
  • Linux 覆盖 .deb/.rpm/.tar.zst,分别适配 Debian 系、RHEL 系与手动解压用户。
  • macOS 的 .pkg 与源码中的 packaging/ 脚本(如 build-osx-app.sh、Info.plist)配合完成打包。

开发环境搭建(开发者快速开始)

推荐工具链

README「开发环境」章节列出的官方工具链:

选型意图:桌面端(Avalonia)用 VS/Rider/VSCode 均可;OpenJDK 与 Android Studio 是构建 ST.Client.Android.App(Xamarin.Android)与 net*-android 目标框架的硬性依赖;Xcode 仅在 macOS 上构建 iOS/macOS 目标时需要。

.NET SDK 版本约束

仓库根目录的 global.json 通过 sdk.rollForward 策略控制 SDK 版本:

json
1{ 2 "sdk": { 3 "version": "11.0.0", 4 "rollForward": "latestMajor", 5 "allowPrerelease": true 6 } 7}

来源:global.json

三个字段的含义与影响:

  • version: "11.0.0":声明的基准 SDK 版本。
  • rollForward: "latestMajor":本机 SDK 主版本大于等于 11 均可参与构建,避免贡献者因小版本差异被阻塞。
  • allowPrerelease: true:允许使用预览版 SDK,说明仓库跟随 .NET 最新版本演进(README 徽章同时声明了 .NET 7.0 / C# 11 的历史版本信息)。

目标框架(TFM)组织

多平台目标不写在每个 csproj 里,而是通过仓库级 props 文件统一注入。src/TFM_NETX_WITH_ALL.props 展示了按构建主机操作系统裁剪 TargetFrameworks 的做法:

xml
1<PropertyGroup> 2 <TargetFrameworks>net$(DotNet_Version)</TargetFrameworks> 3 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net$(DotNet_Version)-macos;net$(DotNet_Version)-windows10.0.19041.0</TargetFrameworks> 4 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('osx'))">$(TargetFrameworks);net$(DotNet_Version)-ios;net$(DotNet_Version)-macos;net$(DotNet_Version)-maccatalyst</TargetFrameworks> 5 <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('linux'))">$(TargetFrameworks)</TargetFrameworks> 6</PropertyGroup>

来源:src/TFM_NETX_WITH_ALL.props

设计意图:

  • 版本号集中在 $(DotNet_Version) 变量,升级 .NET 时只改一处,全部项目随之变化。
  • 按宿主 OS 条件化 TargetFrameworks:Windows 上可额外构建 macos/windows TFM(交叉编译),macOS 上可构建 Apple 全家桶,Linux 只构建基础 TFM——避免在错误平台上触发注定失败的 iOS/Android 工具链。
  • 仓库同时提供 TFM_NETX_WITH_WINDOWS.props(仅追加 Windows TFM)与 TFM_NETX_WITH_ALL.props(追加 macos/windows 等)两个梯度,供不同项目选择裁剪粒度。

最低平台版本矩阵

src/TFM_NETX_WITH_WINDOWS.props 中的 SupportedOSPlatformVersion 定义了各平台可下探的最低版本:

平台标识SupportedOSPlatformVersion与 README 运行要求对照
windows10.0.17763.0(=1809)Windows 10 1809 或更高,一致
macos12.0README 写 10.15,构建侧更严格
android24.0README 写 Android 5.0 (API 21),构建侧更严格
ios15.0iOS 开发中
maccatalyst15.0—
tizen6.5—
xml
1<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion> 2<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">15.0</SupportedOSPlatformVersion> 3<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'macos'">12.0</SupportedOSPlatformVersion> 4<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24.0</SupportedOSPlatformVersion> 5<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>

来源:src/TFM_NETX_WITH_WINDOWS.props

构建脚本

仓库 packaging/ 目录提供的构建入口:

脚本用途
build.cmd / build.ps1 / build.v1.ps1Windows 侧构建脚本
build-osx-app.shmacOS .app 打包脚本
Info.plistmacOS 应用元数据
SHA256.ps1发布产物校验和生成

Tool/ 目录下还有一组服务于开发流程的内部工具(来自 src/README.md):ST.Tools.OpenSourceLibraryList(开源许可清单生成,需 GitHub API Token)、ST.Tools.Translate(Resx 自动翻译,需 Azure Translation Key)、ST.Tools.Publish(发布控制台工具)、ST.Tools.AreaImport(从高德 Excel 导入地区数据)等。这些工具不属于产品运行时,属于「仓库自带工具链」。

核心流程:从克隆到运行

Loading diagram...

关键步骤说明:

  1. 克隆仓库:标准 GitHub 克隆即可;仓库自带 NuGet.Config 管理包源,global.json 会自动约束 SDK 选择。
  2. SDK 校验先行:rollForward: latestMajor 意味着只要本机装有 11 或更高版本的 .NET SDK 即可直接构建,无需精确匹配补丁版本;若使用预览版 SDK 也是允许的(allowPrerelease: true)。
  3. 选择启动项:桌面开发选 ST.Client.Desktop.Avalonia.App;移动端选 ST.Client.Android.App(Xamarin.Android)或 ST.Client.Maui.App。移动端目标仅在对应宿主 OS(或安装了相应工作负载的机器)上参与构建。
  4. 构建:TFM 由仓库级 props 按宿主 OS 注入,开发者无需手动指定平台目标;$(DotNet_Version) 决定统一的 netX 前缀。
  5. 运行与验证:程序启动后默认携带网络加速、账号切换、库存游戏、本地令牌等默认插件(3.0 起为可禁用的插件形态),可直接在 UI 中体验全部内置功能。

配置选项

仓库级构建相关配置(对「快速开始」真正起作用的部分):

配置项类型默认值说明
sdk.versionstring"11.0.0"global.json 声明的基准 .NET SDK 版本
sdk.rollForwardstring"latestMajor"允许更高主版本 SDK 参与构建
sdk.allowPrereleasebooltrue允许使用预览版 SDK
TargetFrameworksstring列表net$(DotNet_Version)由 props 注入,Windows 宿主追加 -macos、-windows10.0.19041.0
SupportedOSPlatformVersion(windows)string10.0.17763.0Windows 最低系统版本(=1809)
SupportedOSPlatformVersion(macos)string12.0macOS 最低版本
SupportedOSPlatformVersion(android)string24.0Android 最低 API
SupportedOSPlatformVersion(ios/maccatalyst)string15.0Apple 平台最低版本
SupportedOSPlatformVersion(tizen)string6.5Tizen 最低版本

应用自身的运行时配置(加速规则、令牌数据库等)属于功能专题页面范畴,本页不展开。

Failure Modes, Edge Cases & Concurrency

基于仓库可见证据,快速开始阶段可能遇到的问题与规避方式:

  • SDK 版本不匹配:global.json 的 version: 11.0.0 + rollForward: latestMajor 意味着 SDK 主版本低于 11 会直接被 dotnet CLI 拒绝(提示找不到匹配 SDK)。解决办法是安装 .NET SDK 11 或更高版本,而不是修改 global.json。
  • 在错误的宿主 OS 上构建移动端目标:TFM_NETX_WITH_ALL.props 用 IsOSPlatform 条件过滤 TargetFrameworks,Linux 宿主只构建基础 TFM。若强行在 Linux 上指定 -android 目标将失败;Android 构建需要 OpenJDK 17 与 Android Studio(Electric Eel+)。
  • MSIX 与绿色版共存:Windows 同时分发 .msix 与 .7z。二者数据目录可能不同(MSIX 有包身份下的重定向),从一种安装形态切换到另一种时注意数据不互通的风险;具体目录结构见 doc/program-file-structure/Windows.md。
  • macOS 子进程 RID 问题:doc/publish.md 注释中记录了一个已知约束——子服务进程二进制的 RID 通过 RuntimeInformation.ProcessArchitecture.ToString() 决定,并通过 PublishFolderType="Assembly" 复制到 MonoBundle;AOT 的 AppHost 无法加载框架依赖发布的程序集(错误 Initialization for self-contained components is not supported)。这解释了为什么发布产物对宿主架构敏感,下载时务必选择与 CPU 架构匹配的 x64 / Arm64 包。
  • AUR watt-toolkit-git 的构建风险:README 明确该包拉取最新源码构建,「也许会构建失败」,追求稳定的用户应选 watt-toolkit-bin。

Performance / Operational Notes

  • 分发渠道的取舍:商店渠道(Steam 商店 / MS Store)可获得自动更新;GitHub/码云 Release 需手动升级;.tar.zst / .7z 为免安装形态,适合便携与容器场景。
  • 多架构发布:所有平台均提供 Arm64 产物,Apple Silicon 与 Windows on ARM 用户应优先选择对应架构包,避免 Rosetta/模拟层开销。
  • 发布产物的完整性校验:packaging/SHA256.ps1 用于生成校验和,下载第三方镜像的安装包时建议核对哈希。
  • 贡献流程:README 提供 QQ 群(960746023)与 Bilibili 官方账号作为社区支持渠道;翻译协作走 Crowdin(crowdin.com/project/steampp,仓库根有 crowdin.yml)。

Extension Points

  • 插件体系:3.0 起网络加速、账号切换、库存游戏、本地令牌等均为「默认插件」,可被用户删除或禁用。这为第三方扩展预留了同一套加载模型,插件机制的内部实现属于专题页面。
  • 平台适配扩展:新增平台能力时应落在 Lib/Platforms/ST.Client.<Platform> 对应项目中,遵循「平台差异只在 Platforms 层」的分层约束。
  • 本地化扩展:UI 文案位于 Application/UI/Resx 与 Properties/SR(见 src/README.md 命名空间约定),配合 ST.Tools.Translate 工具与 Crowdin 完成多语言;新增语言无需改动代码结构。
  • 内部工具链扩展:Tool/ 目录的许可清单、翻译、发布等工具彼此独立,新增开发辅助工具按同样模式添加独立项目即可。

Sources

(4 files)