本文档介绍了 scrcpy 服务器组件的构建过程,该组件运行在 Android 设备上。有关构建运行在您计算机上的客户端组件的信息,请参阅客户端构建流程。
scrcpy 服务器是一个 Android 应用程序,它捕获设备屏幕,对其进行编码,然后将其发送到运行在计算机上的客户端。服务器可以使用以下任一方法构建:
build_without_gradle.sh)这两种方法都生成一个服务器二进制文件,在连接期间由客户端应用程序推送到 Android 设备。
来源:server/build.gradle server/build_without_gradle.sh
Gradle 是 scrcpy 服务器的主要构建方法。它负责编译 Java 源代码,生成必要文件,并将服务器打包成 APK。
服务器的 Gradle 配置指定了
服务器配置了以下属性:
| 属性 | 值 | 目的 |
|---|---|---|
| applicationId | com.genymobile.scrcpy | 唯一标识应用程序 |
| minSdkVersion | 21 | 支持的最低 Android 版本(5.0 Lollipop) |
| targetSdkVersion | 35 | 目标 Android 版本(14) |
| versionCode | 30200 | 内部版本号 |
| versionName | "3.2" | 用户可见的版本字符串 |
手动构建脚本 build_without_gradle.sh 提供了一种无需 Gradle 构建系统即可构建服务器的替代方法。这对于没有 Gradle 的环境或自定义构建场景很有用。
脚本执行以下操作:
来源:server/build_without_gradle.sh1-116
该脚本需要设置某些环境变量:
| 可变 | 默认 | 描述 |
|---|---|---|
| ANDROID_PLATFORM | 35 | 要构建的 Android API 级别 |
| ANDROID_BUILD_TOOLS | 35.0.0 | 使用的 Android build tools 版本 |
| ANDROID_HOME | (系统) | Android SDK 安装路径 |
| BUILD_DIR | build_manual | 构建输出目录 |
来源:server/build_without_gradle.sh17-22
手动构建处理以下 Java 源目录:
com/genymobile/scrcpy/*.java
com/genymobile/scrcpy/audio/*.java
com/genymobile/scrcpy/control/*.java
com/genymobile/scrcpy/device/*.java
com/genymobile/scrcpy/opengl/*.java
com/genymobile/scrcpy/util/*.java
com/genymobile/scrcpy/video/*.java
com/genymobile/scrcpy/wrappers/*.java
该脚本还处理 AIDL 接口文件:
android/content/IOnPrimaryClipChangedListener.aidlandroid/view/IDisplayWindowListener.aidl来源:server/build_without_gradle.sh48-68
该脚本根据 Android 平台版本使用不同的 DEX 编译方法:
对于 API 31 以下的平台
dx 工具将 Java 字节码转换为 DEX对于 API 31 及以上平台
d8 工具(较新的 Android DEX 编译器)来源:server/build_without_gradle.sh88-111
服务器构建过程通过主 meson.build 文件集成到整体 scrcpy 构建系统中。它包含一个条件指令,根据 compile_server 选项来编译服务器。
服务器使用极简的 Android manifest 文件,因为它不是标准的 Android 应用程序。它不定义 Activity、Service 或 Receiver,因为服务器通过 `app_process` 命令直接通过 ADB 启动。
来源:server/src/main/AndroidManifest.xml1-3
服务器版本与客户端版本同步(当前为 3.2)。此版本在多个位置定义:
build.gradle 中作为 versionNamebuild_without_gradle.sh 中作为 SCRCPY_VERSION_NAMEmeson.build 中作为项目版本保持这些版本同步对于确保客户端和服务器组件之间的兼容性至关重要。
来源:server/build.gradle11 server/build_without_gradle.sh15 meson.build2