构建 scrcpy

以下是构建 scrcpy(客户端和服务器)的说明。

如果你只想构建并安装最新版本,请按照 doc/linux.md 中描述的简化流程进行操作。

分支

有两个主要分支: - master:包含最新版本。它是项目在 GitHub 上的主页。 - dev:当前开发分支。dev 中存在的每个提交都将在下一个版本中。

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

要求

你需要 adb。它可以在 Android SDK platform tools 中获得,或者在你们的发行版中打包(adb)。

在 Windows 上,从 platform-tools 下载,并将以下文件解压到一个可以从 PATH 访问的目录中: - adb.exe - AdbWinApi.dll - AdbWinUsbApi.dll

它也可以在 scrcpy 发行版中找到。

客户端需要 FFmpegLibSDL2。请按照说明进行操作。

系统特定步骤

Linux

从包管理器安装所需的包。

Debian/Ubuntu

# 运行时依赖
sudo apt install ffmpeg libsdl2-2.0-0 adb libusb-1.0-0

# 客户端构建依赖
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

# 服务器构建依赖
sudo apt install openjdk-17-jdk

在旧版本(如 Ubuntu 16.04)中,meson 太旧了。在这种情况下,从 pip3 安装:

sudo apt install python3-pip
pip3 install meson

Fedora

# 启用 RPM fusion 免费版
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

# 客户端构建依赖
sudo dnf install SDL2-devel ffms2-devel libusb1-devel meson gcc make

# 服务器构建依赖
sudo dnf install java-devel

Windows

从 Linux 进行交叉编译

这是首选方法(也是发布构建的方式)。

Debian 安装 mingw

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

您还需要 JDK 来构建服务器:

sudo apt install openjdk-17-jdk

然后生成发布:

./release.sh

它将在 dist/ 目录中生成 win32 和 win64 发布。

在 MSYS2

从 Windows,您需要 MSYS2 来构建项目。从 MSYS2 终端开始,安装所需的包:

# 运行时依赖
pacman -S mingw-w64-x86_64-SDL2 \
          mingw-w64-x86_64-ffmpeg \
          mingw-w64-x86_64-libusb

# 客户端构建依赖
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

# 运行时依赖
pacman -S mingw-w64-i686-SDL2 \
          mingw-w64-i686-ffmpeg \
          mingw-w64-i686-libusb

# 客户端构建依赖
pacman -S mingw-w64-i686-make \
          mingw-w64-i686-gcc \
          mingw-w64-i686-pkg-config \
          mingw-w64-i686-meson

Java(>= 7)在 MSYS2 中不可用,所以如果您计划构建服务器,请手动安装它,并使其可从 PATH 访问:

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

Mac OS

使用 Homebrew 安装软件包:

# 运行时依赖
brew install sdl2 ffmpeg libusb

# 客户端构建依赖
brew install pkg-config meson

此外,如果您想构建服务器,请从 Caskroom 安装 Java 17,并使其可从 PATH 访问:

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"

Docker

请查看 pierlon/scrcpy-docker

常见步骤

作为非 root 用户,克隆项目:

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

构建

您可能只想构建客户端:服务器二进制文件,它将被推送到 Android 设备,不依赖于您的系统或架构。在这种情况下,使用 预构建服务器(因此您将不需要 Java 或 Android SDK)。

选项 1:从源代码构建所有内容

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

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

然后,构建:

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

注意:ninja 必须 以非 root 用户身份运行(只有 ninja install 必须以 root 用户身份运行)。

选项 2:使用预构建服务器

下载预构建服务器到某个地方,并在 Meson 配置中指定其路径:

meson setup x --buildtype=release --strip -Db_lto=true \
    -Dprebuilt_server=/path/to/scrcpy-server
ninja -Cx  # DO NOT RUN AS ROOT
服务器仅与匹配的客户端版本一起工作(本服务器与`master`分支一起工作)。

### 无需安装即可运行:

```bash
./run x [选项]

安装

构建成功后,您可以在系统上安装scrcpy

sudo ninja -Cx install    # 在Windows上不使用sudo

这将安装几个文件:

  • /usr/local/bin/scrcpy(主应用程序)
  • /usr/local/share/scrcpy/scrcpy-server(推送到设备的服务器)
  • /usr/local/share/man/man1/scrcpy.1(手册页)
  • /usr/local/share/icons/hicolor/256x256/apps/icon.png(应用程序图标)
  • /usr/local/share/zsh/site-functions/_scrcpy(zsh完成)
  • /usr/local/share/bash-completion/completions/scrcpy(bash完成)

然后您可以运行scrcpy

卸载

sudo ninja -Cx uninstall  # 在Windows上不使用sudo

```