跳转到内容

构建 scrcpy

以下为构建 scrcpy(客户端与服务端)的说明。

如果你只想构建并安装最新发行版,请遵循 doc/linux.md 中的简化流程。

项目主要有两个分支:

  • master:包含最新发行版,同时也是 GitHub 的项目首页。
  • dev:当前开发分支。dev 中的每个提交都会进入下一个发行版。

如果你打算贡献代码,请基于最新的 dev 分支进行提交。

需要安装 adb。它可从 Android SDK 平台工具 获得,或通过发行版的包管理器安装(adb)。

在 Windows 上,下载 platform-tools 并将以下文件解压到可通过 PATH 访问的目录:

  • adb.exe
  • AdbWinApi.dll
  • AdbWinUsbApi.dll

scrcpy 的发行包中也提供了这些文件。

客户端依赖 FFmpegLibSDL2。按照下文说明安装即可。

请通过你的包管理器安装所需的软件包。

Terminal window
# runtime dependencies
sudo apt install ffmpeg libsdl2-2.0-0 adb libusb-1.0-0
# client build dependencies
sudo apt install gcc git pkg-config meson ninja-build libsdl2-dev \
libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
libswresample-dev libusb-1.0-0-dev
# server build dependencies
sudo apt install openjdk-17-jdk

在旧版本系统(如 Ubuntu 16.04)上,meson 过旧。此时可通过 pip3 安装新版:

Terminal window
sudo apt install python3-pip
pip3 install meson
Terminal window
# 启用 RPM fusion free 仓库
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
# client build dependencies
sudo dnf install SDL2-devel ffms2-devel libusb1-devel libavdevice-free-devel meson gcc make
# server build dependencies
sudo dnf install java-devel

这是推荐方法(发行版也是以此方式构建)。

Debian 上安装 mingw

Terminal window
sudo apt install mingw-w64 mingw-w64-tools libz-mingw-w64-dev

构建服务端还需要安装 JDK:

Terminal window
sudo apt install openjdk-17-jdk

然后生成发行包:

Terminal window
./release.sh

这将在 dist/ 目录生成 win32 与 win64 版本。

在 Windows 上,你需要通过 MSYS2 构建该项目。请在 MSYS2 终端安装所需软件包:

Terminal window
# runtime dependencies
pacman -S mingw-w64-x86_64-SDL2 \
mingw-w64-x86_64-ffmpeg \
mingw-w64-x86_64-libusb
# client build dependencies
pacman -S mingw-w64-x86_64-make \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-pkg-config \
mingw-w64-x86_64-meson

如需 32 位版本,将 x86_64 替换为 i686

Terminal window
# runtime dependencies
pacman -S mingw-w64-i686-SDL2 \
mingw-w64-i686-ffmpeg \
mingw-w64-i686-libusb
# client build dependencies
pacman -S mingw-w64-i686-make \
mingw-w64-i686-gcc \
mingw-w64-i686-pkg-config \
mingw-w64-i686-meson

MSYS2 中不提供 Java(>= 7),如果你计划构建服务端,请手动安装并确保可通过 PATH 访问:

Terminal window
export PATH="$JAVA_HOME/bin:$PATH"

通过 Homebrew 安装相关包:

Terminal window
# runtime dependencies
brew install sdl2 ffmpeg libusb
# client build dependencies
brew install pkg-config meson

此外,如需构建服务端,请通过 Caskroom 安装 Java 17,并确保可通过 PATH 访问:

Terminal window
brew tap homebrew/cask-versions
brew install adoptopenjdk/openjdk/adoptopenjdk17
export JAVA_HOME="$(/usr/libexec/java_home --version 1.17)"
export PATH="$JAVA_HOME/bin:$PATH"

参见 pierlon/scrcpy-docker

以非 root 用户身份克隆项目:

Terminal window
git clone https://github.com/Genymobile/scrcpy
cd scrcpy

你可能只需要构建客户端:服务端二进制将被推送到 Android 设备,它不依赖你的系统与架构。此时可使用[预构建服务端](因此不需要 Java 或 Android SDK)。

安装 Android SDKAndroid Studio),并将 ANDROID_SDK_ROOT 设置为其目录。例如:

Terminal window
# Linux
export ANDROID_SDK_ROOT=~/Android/Sdk
# Mac
export ANDROID_SDK_ROOT=~/Library/Android/sdk
# Windows
set ANDROID_SDK_ROOT=%LOCALAPPDATA%\Android\sdk

然后进行构建:

Terminal window
meson setup x --buildtype=release --strip -Db_lto=true
ninja -Cx # DO NOT RUN AS ROOT

注意:ninja 必须以非 root 用户运行(仅 ninja install 需要以 root 运行)ninja-user

在某处下载预构建的服务端,并在 Meson 配置时指定其路径:

Terminal window
meson setup x --buildtype=release --strip -Db_lto=true \
-Dprebuilt_server=/path/to/scrcpy-server
ninja -Cx # DO NOT RUN AS ROOT

服务端仅能与匹配的客户端版本一起工作(该服务端适配 master 分支)。

Terminal window
./run x [options]

构建成功后,你可以将 scrcpy 安装到系统:

Terminal window
sudo ninja -Cx install # without sudo on Windows

这会安装以下文件:

  • /usr/local/bin/scrcpy (main app)
  • /usr/local/share/scrcpy/scrcpy-server (server to push to the device)
  • /usr/local/share/man/man1/scrcpy.1 (manpage)
  • /usr/local/share/icons/hicolor/256x256/apps/icon.png (app icon)
  • /usr/local/share/zsh/site-functions/_scrcpy (zsh completion)
  • /usr/local/share/bash-completion/completions/scrcpy (bash completion)

随后即可运行 scrcpy

Terminal window
sudo ninja -Cx uninstall # without sudo on Windows