# 手动构建 Qv2ray 项目

本文针对喜欢折腾并想手动构建 Qv2ray 项目的爱好者们。

# 0. 构建依赖

请确保你的环境满足以下依赖的要求。

  • 对于桌面平台:仅支持 x64 架构

  • 对于 Android 平台:armarm64x86x86_64 架构

  • 桌面平台需要 Qt 版本 >= 5.11 ,Android 平台需要 Qt 版本 >= 6.0

    • 将 Qv2ray 移植到更低或更高版本的 Qt 时请无视该条件
    • 在这种情况下,您可能需要修改 CMakeLists.txt 中的 QV_QT_MAJOR_VERSIONQV_QT_MINOR_VERSION
  • 总是支持最新版本的 Qt ,推荐使用

  • 支持 std=c+17 的编译器:

    • gcc7 即可支持
    • 最低 14.2 版本的 MSVC
  • 第三方库:(gRPC、protobuf、curl、openssl)

    目标平台 安装方式
    Linux 安装相应的软件包
    Windows (MSVC) 使用 vcpkg 或使用 预构建的二进制文件
    Windows (MinGW) 下文
    macOS 通过 homebrew 安装软件包(注意:curl 已经被预先安装)
    Android 支持从 Linux 交叉编译,请使用预构建的二进制文件

    Android 平台下的额外 Git 子模块

    android-openssl (opens new window) 提供了 OpenSSL 二进制文件:使用命令 git clone https://github.com/KDAB/android_openssl 3rdparty/android-openssl 下载

# a. 预构建的二进制文件

# a.1 下载 / 解压脚本

额外依赖:bash 、 jq 、curl 、7zip (对于 Windows 用户)

我们提供了 ./libs/setup-lib.sh,可以很容易地安装预构建的二进制文件,用法:

  • cdlibs 目录
  • ./setup-libs <PLATFORM> <ARCH>
    • 例如./setup-libs.sh windows x64./setup-libs.sh android arm
    • 可能的<PLATFORM>值: windowslinuxandroid
    • 可能的<ARCH>值: x86x64armarm64
    • 在 Linux 上为 Android 交叉编译时将 <ARCH> 设置为 tools 以安装 Protobuf 生成器

该脚本从 此 release (opens new window) 下载压缩包,解压并移动到相应的 ./libs/ARCH-PLATFORM/ 目录。

# a.2 手动获取预构建的二进制文件

  • 下载对应的 7z 压缩文件
  • 解压并移动 {7Z_ROOT}/PLATFORM-ARCH/installed/ARCH-PLATFORM./libs/ 目录。
  • ./libs/ARCH-PLATFORM 下必须包含 includelibshare 子目录。
    • 例如./libs/x86-android/include./libs/x64-windows/include/

# MinGW 软件包:

建议使用 MSYS2 ,对应的软件包:

  • mingw-w64-x86_64-grpc
  • mingw-w64-x86_64-curl
  • mingw-w64-x86_64-protobuf
  • mingw-w64-x86_64-protobuf-c
  • mingw-w64-x86_64-pkg-config
  • mingw-w64-x86_64-re2

# 1. 获取源码树

有多种方式获取 Qv2ray 的源码,你可以使用以下任意方式:

  • Git: https://github.com/Qv2ray/Qv2ray.git
  • 通过 GitHub 直接下载仓库上某个分支的源码(不建议这样做,因为它缺少 Git 子模块的元数据

你可以在 `git clone` 后面附加一些选项

--branch <branch/tag> 在克隆创建后检出到指定分支/标签。

WARNING

Qv2ray 的源码包含嵌套的子模块,进行 Git Clone 时请记得添加 --recursive 参数。

# 2. 进入编译目录

以下步骤需要正确的 PATH ,即可以在 PATH 下找到 qmake

执行:mkdir build; cd build;

  • 只是为了防止污染源码树。

# 3. 生成编译脚本

需要查看 CMake 参数参考 并添加自己的参数。

执行:cmake ..

构建 Android 时,使用 qt-cmake .. 而不是 cmake ..

  • 始终建议使用 CMAKE_INSTALL_PREFIX ,以便一次性打包和收集所有必需的文件。
  • 始终建议使用 CMAKE_BUILD_TYPE ,请参阅 CMake文档 (opens new window)
    • Debug 版本的 Qv2ray 配置目录名称将不同于 Release 版本,以防止开发版构建污染正式版构建的配置文件。
  • 如果您已安装Ninjaninja-build ,建议使用 -GNinja
  • 构建 Android 时可能需要ANDROID_SDK_ROOTANDROID_NDK_ROOT

# 4. 开始编译

开始编译!

执行:cmake --build .

  • 如果您拥有足够的算力并且想要执行并行编译,则推荐使用参数 --parallel <并行数>

# 5. 完成编译

将编译的成品和资源复制到目标目录中。

执行:cmake --install .sudo cmake --install .

  • 这将自动复制所有依赖到 CMAKE_INSTALL_PREFIX

WARNING

macdeployqt 中存在一个 bug,libabsl_debugging_internal 被识别为调试库,这将阻止部署 QPlatformPlugin(即 QCocoaPlugin),最终将导致运行时异常,提示“No Platform Plugin is Found”。

请改用 Qv2ray 修改过的 macdeployqt (opens new window) 。同时支持 Qt5 和 Qt6

# 6. 完成

你已经编译并部署了你自己的 Qv2ray!

开始折腾,Qv2ray 欢迎您的贡献!

上次更新: 2021/5/10 上午9:58:55