本页面介绍了 scrcpy 使用的构建系统,涵盖了客户端和服务器组件。有关特定客户端和服务器实现细节的信息,请参阅 客户端组件 和 服务器组件。
Scrcpy 采用双组件构建系统,其中客户端应用程序(C 代码)使用 Meson 构建,服务器组件(Java 代码)使用 Gradle 或手动构建脚本构建。
来源: meson.build app/meson.build server/build.gradle server/build_without_gradle.sh meson_options.txt cross_win32.txt cross_win64.txt
Meson 是 scrcpy 的主要构建系统。它用于构建客户端应用程序,还可以触发服务器构建过程。Meson 处理依赖项管理、配置和特定于平台的构建设置。
Gradle 用于构建服务器组件,即 Android 应用程序。它管理 Android SDK 依赖项、Java 编译,并将服务器打包成 JAR 文件。
对于没有 Gradle 的环境,scrcpy 提供了一个手动构建脚本(build_without_gradle.sh),可以直接使用 Android SDK 工具编译服务器组件。
来源: meson.build server/build.gradle server/build_without_gradle.sh meson_options.txt cross_win32.txt cross_win64.txt
项目配置通过 meson_options.txt 中定义的 Meson 选项进行控制。主要选项包括:
| 选项 | 类型 | 默认 | 描述 |
|---|---|---|---|
compile_app | 布尔值 | true | 构建客户端应用程序 |
compile_server | 布尔值 | true | 构建服务器组件 |
prebuilt_server | 字符串 | (无) | 预构建服务器 JAR 文件的路径 |
portable | 布尔值 | false | 使用可执行文件同目录下的服务器 JAR |
static | 布尔值 | false | 使用静态依赖项 |
server_debugger | 布尔值 | false | 运行服务器并附加调试器 |
v4l2 | 布尔值 | true | 在支持时启用 V4L2 功能 (Linux) |
usb | 布尔值 | true | 在支持时启用 HID/OTG 功能 |
来源: meson_options.txt meson.build
客户端的构建过程由 Meson 管理,并在 app/meson.build 中定义。
客户端由多个 C 源文件组成,按功能组织:
main.c, scrcpy.c)adb/*.c)decoder.c, demuxer.c, audio_player.c)screen.c, input_manager.c)util/*.c)sys/win/*.c 或 sys/unix/*.c)客户端依赖于几个外部库:
如果启用了 static 选项,这些依赖项可以静态链接。
构建系统处理特定于平台的差异
来源: app/meson.build74-91 app/meson.build131-134
服务器组件在 Android 设备上运行,可以与 Gradle 一起构建,也可以手动构建。
服务器在 build.gradle 中配置,设置如下:
com.genymobile.scrcpyGradle 构建系统会编译 Java 源代码,处理 AIDL 文件,并将它们打包成 JAR 文件,然后推送到 Android 设备。
对于没有 Gradle 的环境,build_without_gradle.sh 脚本提供了一种替代构建方法。
dx (Android < 31) 或 d8 (Android >= 31) 对类文件进行 Dex 操作脚本需要:
ANDROID_HOME 环境变量已设置来源: server/build_without_gradle.sh1-116
Scrcpy 为从 Linux 环境交叉编译 Windows 客户端应用程序提供了配置文件。
交叉编译配置(cross_win32.txt 和 cross_win64.txt)定义了:
要使用这些配置,您需要:
构建方法是:
meson setup --cross-file cross_win64.txt build_win64
ninja -C build_win64
来源: cross_win32.txt cross_win64.txt
在为 Windows 构建时,构建系统会包含特定于 Windows 的资源:
这些在 app/scrcpy-windows.rc 和 app/scrcpy-windows.manifest 中定义,并会被编译和链接到最终的可执行文件中。
来源: app/scrcpy-windows.rc app/scrcpy-windows.manifest
构建系统支持在调试模式下编译和运行测试。
tests/ 目录中定义。