OpenNOW开发者指南:从零构建、跑通验收测试与贡献你的第一个Pull Request
【免费下载链接】OpenNOWCustom GeForce Now Client Named OpenNOW项目地址: https://gitcode.com/gh_mirrors/op/OpenNOW
OpenNOW 是一个开源的 GeForce NOW 桌面客户端,使用 Qt Quick 构建界面、Rust 负责账号服务与串流。本文是面向新手的OpenNOW 开发者指南:带你完成从零构建、跑通本地与验收测试,并一步步提交你的第一个 Pull Request,帮助你快速上手这个项目的贡献流程。
一、先认清仓库结构:OpenNOW 由哪些部分组成
动手前,先花 2 分钟了解代码在哪里。OpenNOW 仓库分为几大块,各司其职:
| 目录 | 技术栈 | 职责 |
|---|---|---|
| opennow-qt/ | Qt 6 + C++20 + QML | 桌面应用界面、输入、串流渲染集成与 Qt 测试 |
| native/opennow-core/ | Rust | 账号、设置、目录、会话编排等应用核心服务 |
| native/opennow-streamer/ | Rust | NVST 串流传输、解码、音频、输入与 Qt FFI |
| locales/ | JSON | 英文源文案 + Crowdin 管理的多语言翻译 |
| docs/ | Markdown | 协议、验收、发布等架构文档 |
架构上,Qt 只负责绘制窗口与交互;Rust 核心在独立进程中运行,两者通过带版本的 JSON 协议通信,协议细节见 docs/core-protocol.md。串流部分则以版本化 C ABI 的方式嵌入 Qt 进程,视频全程留在 GPU 上。
二、从零构建:安装依赖并完成第一次编译
🛠️ 构建 OpenNOW 需要以下工具链(构建和运行桌面端不需要Node.js 或 npm):
- Qt 6.8+(含 Quick、Multimedia、ShaderTools)
- CMake 3.24+ 与 C++20 工具链
- SDL3、Cargo(Rust)及平台媒体依赖
- Linux 还需
pkg-config、libwayland-dev、wayland-protocols(X11 构建也要求安装)
一键克隆与配置
在终端中依次执行:
git clone https://gitcode.com/gh_mirrors/op/OpenNOW cd OpenNOW cmake -S opennow-qt -B build/opennow-qt -DCMAKE_BUILD_TYPE=Debug cmake --build build/opennow-qt配置时使用main分支获取发布源码,dev分支则是持续开发中的版本。macOS 用户的完整构建步骤(含CMAKE_OSX_ARCHITECTURES与打包命令)参考 opennow-qt/README.md 的 Build 章节。
没有 GFN 账号也能验证构建
登录和实际游戏需要自己的 GeForce NOW 账号;但即使没有账号,你依然可以运行冒烟测试、截图夹具和性能检查——这正是项目测试体系对新手最友好的地方。
三、跑通验收测试:像 CI 一样验证你的构建
✅ OpenNOW 的测试分为几层,你只需要按顺序执行,就能在本地复刻大部分 CI 检查:
第 1 步:运行完整 Qt 测试套件
ctest --test-dir build/opennow-qt --output-on-failure第 2 步:运行 Rust 核心与串流器测试
cargo test --manifest-path native/opennow-core/Cargo.toml cargo test --manifest-path native/opennow-streamer/Cargo.toml --workspace第 3 步:可选——无账号冒烟测试
使用 offscreen 平台插件做启动冒烟测试,无需登录即可截图验证:
QT_QPA_PLATFORM=offscreen ./build/opennow-qt/opennow-qt \ --smoke-test --allow-multiple-instances --route home几个实用技巧(均来自 opennow-qt/README.md):
- 开发开关:
--route <name>打开指定页面、--overlay <name>打开浮层、--screenshot <png>保存截图 - 主题检查:
ctest --test-dir build/opennow-qt -R 'theme-tests|qml-theme-settings' - CI 的 headless 测试只跑
ci-unit标签的用例;需要真实桌面交互的用例在interactive-desktop标签下,二者互不替代
关于"发布前必须验证什么",项目的完整验收矩阵写在 docs/qt-acceptance.md,它是理解 OpenNOW 质量门槛的最佳入口。
四、了解 CI 检查:你的提交会经历什么
提交 PR 后,qt-ci工作流会在 Linux x64、Windows x64、macOS ARM64 上并行运行:工作流 lint、打包契约测试、本地化校验,随后是 Rust 格式化/静态检查/测试 + QML 语法检查 +ci-unitQt 测试。三个平台的状态检查(linux-x64、windows-x64、macos-arm64)都是合入dev/main的必需条件。
⚠️ 注意:完整应用构建、ARM64 交叉编译和打包只在手动派发时执行——如果你的改动涉及这些路径,合入前请先手动跑一次构建。CI 的缓存与性能策略可参考 docs/ci-performance.md。
五、贡献你的第一个 Pull Request 🚀
OpenNOW 的贡献规范集中在 .github/CONTRIBUTING.md 与 AGENTS.md 两份文档中,建议通读后再动手。核心要点:
- 建特性分支,保持每次提交聚焦单一改动
- 先跑最小相关测试:改动 Qt 就跑对应
ctest -R用例,改动 Rust 就跑对应 crate 测试;有条件时再跑完整套件 - 本地化特殊规则:只编辑 locales/en.json,其他语言文件由 Crowdin 生成,禁止手改;改完后运行
npm run locales:check校验(这是仓库中少数需要 Node.js 的场景) - 提交 PR时使用简洁的变更摘要(模板见 .github/PULL_REQUEST_TEMPLATE.md),把一次性的验证截图作为附件上传,而不是提交进仓库
- 报 Bug 时附上构建版本、系统、GPU 与复现步骤;串流类问题请先在 设置 → 关于 → 复制诊断 导出诊断报告,并注意检查其中的隐私信息
新手友好切入点清单
- QML 界面调整:改 opennow-qt/qml/ 下的组件,配合冒烟测试截图自测
- 文案修复:仅改 locales/en.json,门槛最低
- 文档完善:docs/ 下的架构与验收文档
- 测试补充:opennow-qt/tests/ 下有大量 QML 验收用例可参考写法
六、常用参考文档速查
| 文档 | 内容 |
|---|---|
| opennow-qt/README.md | 构建、冒烟测试、诊断与功能说明总入口 |
| docs/qt-acceptance.md | 验收手册:每个功能需要哪些证据 |
| docs/core-protocol.md | Qt 壳层与 Rust 核心的 JSON 协议 |
| native/opennow-streamer/README.md | 原生串流器的图形后端与 FFI 说明 |
| docs/qt-migration.md | 从 Electron 迁移到 Qt 的历史与遗留清单 |
从零构建、跑通测试、发出第一个 PR——你现在已经掌握了 OpenNOW 贡献所需的完整路径。记住 AGENTS.md 里的核心优先级:性能优先、可靠优先、行为可预测。祝你的第一个 Pull Request 顺利合入!
【免费下载链接】OpenNOWCustom GeForce Now Client Named OpenNOW项目地址: https://gitcode.com/gh_mirrors/op/OpenNOW
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考