发音为“screen copy”
此应用程序提供通过USB或通过TCP / IP连接的Android设备的显示和控制。它不需要任何根访问权限。它适用于GNU/Linux、Windows和macOS。
它侧重于:
其功能包括:
Android 设备至少需要 API 21 (Android 5.0)。
确保在设备上启用 adb 调试。
在某些设备上,你还需要启用其他选项以使用键盘和鼠标对其进行控制。
apt install scrcpy
brew install scrcpy
在 Debian 和 Ubuntu 上:
apt install scrcpy
在 Arch Linux 上:
pacman -S scrcpy
对于 Windows,可以使用包含所有依赖项(包括)的预构建存档:
adb
scrcpy-win64-v1.25.zip
db65125e9c65acd00359efb7cea9c05f63cc7ccd5833000cd243cc92f5053028
它也有巧克力味:
choco install scrcpy
choco install adb # if you don't have it yet
在独家新闻中:
scoop install scrcpy
scoop install adb # if you don't have it yet
你也可以手动构建应用程序。
该应用程序在自制软件中可用。只需安装它:
brew install scrcpy
你需要 ,可从你的 .如果你还没有:
adb
PATH
brew install android-platform-tools
它在MacPorts中也可用,它为你设置:
adb
sudo port install scrcpy
你也可以手动构建应用程序。
将安卓设备插入计算机,然后执行:
scrcpy
它接受命令行参数,按以下方式列出:
scrcpy --help
有时,以较低的分辨率镜像Android设备以提高性能很有用。
要将宽度和高度限制为某个值(例如 1024):
scrcpy --max-size=1024
scrcpy -m 1024 # short version
计算另一个维度,以便保留 Android 设备的纵横比。这样,1920×1080 中的设备将在 1024×576 处镜像。
默认比特率为 8 Mbps。要更改视频比特率(例如更改为 2 Mbps):
scrcpy --bit-rate=2M
scrcpy -b 2M # short version
捕获帧速率可以限制:
scrcpy --max-fps=15
自 Android 10 起,此功能得到正式支持,但可能适用于早期版本。
实际捕获帧速率可能会打印到控制台:
scrcpy --print-fps
它也可以随时使用 + 启用或禁用。MODi
设备屏幕可以裁剪为仅镜像屏幕的一部分。
例如,这很有用,可以只镜像Oculus Go的一只眼睛:
scrcpy --crop=1224:1440:0:0 # 1224x1440 at offset (0,0)
如果还指定,则在裁剪后应用调整大小。
--max-size
要锁定镜像的方向:
scrcpy --lock-video-orientation # initial (current) orientation
scrcpy --lock-video-orientation=0 # natural orientation
scrcpy --lock-video-orientation=1 # 90° counterclockwise
scrcpy --lock-video-orientation=2 # 180°
scrcpy --lock-video-orientation=3 # 90° clockwise
这会影响录制方向。
某些设备具有多个编码器,其中一些可能会导致问题或崩溃。可以选择不同的编码器:
scrcpy --encoder=OMX.qcom.video.encoder.avc
若要列出可用的编码器,可以传递无效的编码器名称;该错误将给出可用的编码器:
scrcpy --encoder=_
可以在镜像时录制屏幕:
scrcpy --record=file.mp4
scrcpy -r file.mkv
要在录制时禁用镜像:
scrcpy --no-display --record=file.mp4
scrcpy -Nr file.mkv
# interrupt recording with Ctrl+C
“跳过的帧”被记录下来,即使它们不是实时显示的(出于性能原因)。帧在设备上带有时间戳,因此数据包延迟变化不会影响录制的文件。
在 Linux 上,可以将视频流发送到 v4l2 环回设备,以便任何支持 v4l2 的工具都可以像网络摄像头一样打开 Android 设备。
必须安装该模块:
v4l2loopback
sudo apt install v4l2loopback-dkms
要创建 v4l2 设备,请执行以下操作:
sudo modprobe v4l2loopback
这将在 中创建一个新的视频设备,其中 是整数(有更多选项可用于创建多个设备或具有特定 ID 的设备)。
/dev/videoN
N
要列出已启用的设备:
# requires v4l-utils package
v4l2-ctl --list-devices
# simple but might be sufficient
ls /dev/video*
若要开始使用 v4l2 接收器,请执行以下操作:
scrcpy
scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN --no-display # disable mirroring window
scrcpy --v4l2-sink=/dev/videoN -N # short version
(替换为设备 ID,检查
N
ls /dev/video*)
启用后,你可以使用支持 v4l2 的工具打开视频流:
ffplay -i /dev/videoN
vlc v4l2:///dev/videoN # VLC might add some buffering delay
例如,你可以在 OBS 中捕获视频。
可以添加缓冲。这会增加延迟,但会减少抖动(请参阅#2464)。
该选项可用于显示缓冲:
scrcpy --display-buffer=50 # add 50 ms buffering for display
和 V4L2 接收器:
scrcpy --v4l2-buffer=500 # add 500 ms buffering for v4l2 sink
Scrcpy用于与设备通信,并且可以通过TCP / IP连接到设备。设备必须与计算机连接在同一网络上。
adb
adb
一个选项允许自动配置连接。有两种变体。
--tcpip
如果设备(在本例中可通过 192.168.1.1 访问)已在端口(通常为 5555)上侦听传入的 adb 连接,则运行:
scrcpy --tcpip=192.168.1.1 # default port is 5555
scrcpy --tcpip=192.168.1.1:5555
如果在设备上禁用了 adb TCP/IP 模式(或者如果你不知道 IP 地址),请通过 USB 连接设备,然后运行:
scrcpy --tcpip # without arguments
它将自动找到设备 IP 地址和 adb 端口,必要时启用 TCP/IP 模式,然后在启动前连接到设备。
或者,可以使用以下命令手动启用 TCP/IP 连接:
adb
将设备插入计算机上的 USB 端口。
将设备连接到与计算机相同的 Wi-Fi 网络。
在“设置”→“关于电话→状态”中获取设备 IP 地址,或通过执行以下命令:
adb shell ip route | awk '{print $9}'
在你的设备上通过 TCP/IP 启用:。
adb
adb tcpip 5555
拔下设备插头。
连接到你的设备:(将DEVICE_IP替换为你找到的设备 IP 地址)。
adb connect DEVICE_IP:5555
照常运行。
scrcpy
从Android 11开始,无线调试选项允许绕过将设备直接物理连接到计算机的麻烦。
如果连接随机断开,请运行命令以重新连接。如果显示未找到设备/模拟器,请尝试再次运行,然后照常运行。如果仍然显示未找到任何命令,请尝试运行 ,然后再次运行这两个命令。
scrcpy
adb connect DEVICE_IP:5555
scrcpy
adb disconnect
降低比特率和分辨率可能很有用:
scrcpy --bit-rate=2M --max-size=800
scrcpy -b2M -m800 # short version
如果 中列出了多个设备,则可以指定序列号:
adb devices
scrcpy --serial=0123456789abcdef
scrcpy -s 0123456789abcdef # short version
串行也可以通过环境变量(也由 使用)提供。
ANDROID_SERIAL
adb
如果设备通过 TCP/IP 连接:
scrcpy --serial=192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # short version
如果只有一个设备通过USB或TCP / IP连接,则可以自动选择它:
# Select the only device connected via USB
scrcpy -d # like adb -d
scrcpy --select-usb # long version
# Select the only device connected via TCP/IP
scrcpy -e # like adb -e
scrcpy --select-tcpip # long version
你可以为多个设备启动多个 scrcpy 实例。
你可以使用自动广告:
autoadb scrcpy -s '{}'
要连接到远程设备,可以将本地客户端连接到远程服务器(前提是它们使用相同版本的 adb 协议)。
adb
adb
要连接到远程 adb 服务器,请使服务器侦听所有接口:
adb kill-server
adb -a nodaemon server start
# keep this open
警告:客户端和 adb 服务器之间的所有通信均未加密。
假设可以通过 192.168.1.2 访问此服务器。然后,从另一个终端运行:
scrcpy
# in bash
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
:: in cmd
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:192.168.1.2:5037'
scrcpy --tunnel-host=192.168.1.2
缺省情况下, 使用用于建立隧道的本地端口(通常请参见)。也可以强制使用不同的隧道端口(在更复杂的情况下,当涉及更多重定向时,它可能很有用):
scrcpy
adb forward
27183
--port
scrcpy --tunnel-port=1234
要安全地与远程 adb 服务器通信,最好使用 SSH 隧道。
首先,确保 adb 服务器在远程计算机上运行:
adb start-server
然后,建立一个 SSH 隧道:
# local 5038 --> remote 5037
# local 27183 <-- remote 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# keep this open
从另一个终端,运行:
scrcpy
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy
为避免启用远程端口转发,你可以改为强制转发连接(请注意,而不是 ):
-L
-R
# local 5038 --> remote 5037
# local 27183 --> remote 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# keep this open
从另一个终端,运行:
scrcpy
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy --force-adb-forward
与无线连接一样,降低质量可能很有用:
scrcpy -b2M -m800 --max-fps=15
默认情况下,窗口标题为设备型号。它可以更改:
scrcpy --window-title='My device'
可以指定初始窗口位置和大小:
scrcpy --window-x=100 --window-y=100 --window-width=800 --window-height=600
要禁用窗口装饰:
scrcpy --window-borderless
要使 scrcpy 窗口始终位于顶部,请执行以下操作:
scrcpy --always-on-top
该应用程序可以直接全屏启动:
scrcpy --fullscreen
scrcpy -f # short version
然后可以使用 + 动态切换全屏。MODf
窗口可以旋转:
scrcpy --rotation=1
可能的值:
0:无旋转
1:逆时针90度
2: 180 度
3:顺时针90度
旋转也可以使用 +(左)和 +(右)动态更改。MOD←MOD→
请注意,scrcpy 管理 3 种不同的旋转:
-锁定视频
方向更改镜像方向(从设备发送到计算机的视频的方向)。这会影响录制。--rotation(或 +/+) 仅旋转窗口内容。这仅影响显示,而不影响录制。MOD←MOD→
要禁用控件(可以与设备交互的所有内容:输入键,鼠标事件,拖放文件):
scrcpy --no-control
scrcpy -n
如果有多个显示器可用,则可以选择要镜像的显示器:
scrcpy --display=1
可以通过以下方式检索显示 ID 列表:
adb shell dumpsys display # search "mDisplayId=" in the output
仅当设备至少运行 Android 10 时,才能控制辅助显示屏(否则会镜像为只读)。
要防止设备在插入设备时延迟后休眠,请执行以下操作:
scrcpy --stay-awake
scrcpy -w
关闭 scrcpy 时恢复初始状态。
可以使用命令行选项在启动时镜像时关闭设备屏幕:
scrcpy --turn-screen-off
scrcpy -S
或者随时按 +。MODo
要重新打开它,请按 ++。MODShifto
在安卓设备上,该按钮始终打开屏幕。为方便起见,如果通过scrcpy(通过右键单击或+)发送,它将在小延迟后强制关闭屏幕(尽最大努力)。物理按钮仍会导致屏幕打开。
POWER
POWERMODp
POWER
防止设备进入睡眠状态也很有用:
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw
要在关闭 scrcpy 时关闭设备屏幕:
scrcpy --power-off-on-close
默认情况下,在启动时,设备已打开电源。
若要防止此行为,请执行以下操作:
scrcpy --no-power-on
对于演示文稿,显示物理触摸(在物理设备上)可能很有用。
Android 在开发者选项中提供了此功能。
Scrcpy 提供了一个选项,用于在启动时启用此功能并在退出时恢复初始值:
scrcpy --show-touches
scrcpy -t
请注意,它仅显示物理触摸(通过设备上的手指)。
默认情况下,scrcpy 不会阻止屏幕保护程序在计算机上运行。
要禁用它:
scrcpy --disable-screensaver
按 + 可在纵向和横向模式之间切换。MODr
请注意,仅当前台中的应用程序支持请求的方向时,它才会旋转。
每当Android剪贴板更改时,它都会自动同步到计算机剪贴板。
任何快捷方式都会转发到设备。特别:Ctrl
这通常按预期工作。
但是,实际行为取决于活动应用程序。例如,Termux 在 + 上发送 SIGINT,而 K-9 Mail 撰写新邮件。Ctrlc
在这种情况下要复制、剪切和粘贴(但仅在 Android >= 7 上支持):
COPY
CUT
PASTE
此外,++ 将计算机剪贴板文本作为一系列关键事件注入。当组件不接受文本粘贴(例如在 Termux 中)时,这很有用,但它可能会破坏非 ASCII 内容。MODShiftv
警告:将计算机剪贴板粘贴到设备(通过 + 或 +)会将内容复制到 Android 剪贴板中。因此,任何Android应用程序都可以读取其内容。你应该避免以这种方式粘贴敏感内容(如密码)。CtrlvMODv
以编程方式设置设备剪贴板时,某些 Android 设备的行为不符合预期。提供了一个选项来更改 + 和 + 的行为,以便它们也将计算机剪贴板文本作为键事件序列注入(与 ++ 相同)。
--legacy-pasteCtrlvMODvMODShiftv
要禁用自动剪贴板同步,请使用 。
--no-clipboard-autosync
要模拟“捏合缩放”:+单击并移动。Ctrl
更准确地说,按住并按下左键单击按钮。在释放左键单击按钮之前,所有鼠标移动都会相对于屏幕中心缩放和旋转内容(如果应用程序支持)。Ctrl
从技术上讲,scrcpy 从屏幕中心倒置位置的“虚拟手指”生成额外的触摸事件。
默认情况下,scrcpy使用Android密钥或文本注入:它可以在任何地方使用,但仅限于ASCII。
或者,可以在 Android 上模拟物理 USB 键盘以提供更好的输入体验(通过 AOAv2 使用 USB HID):虚拟键盘已禁用,适用于所有字符和 IME。
scrcpy
但是,仅当设备通过USB连接时,它才有效。
注意:在 Windows 上,它可能只能在 OTG 模式下工作,而在镜像时不能工作(如果 USB 设备已经被另一个进程(如 adb 守护程序)打开,则无法打开 USB 设备)。
要启用此模式:
scrcpy --hid-keyboard
scrcpy -K # short version
如果由于某种原因(例如,由于设备未通过 USB 连接)而失败,它会自动回退到默认模式(在控制台中登录)。这允许在通过 USB 和 TCP/IP 连接时使用相同的命令行选项。
在此模式下,原始密钥事件(扫描码)将发送到设备,与主机密钥映射无关。因此,如果你的键盘布局不匹配,则必须在 Android 设备上的“系统→语言设置”→“中对其进行配置,然后输入→物理键盘。
此设置页面可以直接启动:
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
但是,该选项仅在启用 HID 键盘(或连接物理键盘)时可用。
与物理键盘模拟类似,可以模拟物理鼠标。同样,仅当设备通过USB连接时,它才有效。
默认情况下,scrcpy 使用具有绝对坐标的 Android 鼠标事件注入。通过模拟物理鼠标,Android 设备上会出现鼠标指针,并注入相对鼠标运动、点击和滚动。
要启用此模式:
scrcpy --hid-mouse
scrcpy -M # short version
你还可以添加以转发所有鼠标按钮。
--forward-all-clicks
启用此模式后,计算机鼠标将被“捕获”(鼠标指针从计算机中消失,而是出现在 Android 设备上)。
特殊捕获键(或 )切换(禁用或启用)鼠标捕获。使用其中一个将鼠标的控制权交还给计算机。AltSuper
可以仅使用物理键盘和鼠标模拟 (HID) 运行 scrcpy,就像计算机键盘和鼠标通过 OTG 电缆直接插入设备一样。
在此模式下,不需要(USB调试),并且禁用了镜像。
adb
要启用 OTG 模式:
scrcpy --otg
# Pass the serial if several USB devices are available
scrcpy --otg -s 0123456789abcdef
只能启用 HID 键盘或 HID 鼠标:
scrcpy --otg --hid-keyboard # keyboard only
scrcpy --otg --hid-mouse # mouse only
scrcpy --otg --hid-keyboard --hid-mouse # keyboard and mouse
# for convenience, enable both by default
scrcpy --otg # keyboard and mouse
喜欢和,它仅在设备通过USB连接时才有效。
--hid-keyboard
--hid-mouse
键入文本时会生成两种类型的事件:
默认情况下,使用键事件注入字母,以便键盘在游戏中按预期运行(通常用于 WASD 键)。
但这可能会导致问题。如果遇到此类问题,可以通过以下方式避免:
scrcpy --prefer-text
(但这会破坏游戏中的键盘行为)
相反,你可以强制始终注入原始密钥事件:
scrcpy --raw-key-events
这些选项对 HID 键盘没有影响(在此模式下,所有键事件都作为扫描码发送)。
默认情况下,按住某个键会生成重复的键事件。这可能会导致某些游戏的性能问题,在这些游戏中,这些事件无论如何都是无用的。
要避免转发重复的关键事件,请执行以下操作:
scrcpy --no-key-repeat
此选项对 HID 键盘没有影响(在此模式下,Android 直接处理按键重复)。
默认情况下,右键单击触发器返回(或开机),中键单击触发主页。要停用这些快捷方式并将点击内容转发到设备,请执行以下操作:
scrcpy --forward-all-clicks
要安装APK,请将APK文件(以 结尾)拖放到scrcpy窗口中。
.apk
没有视觉反馈,日志打印到控制台。
要将文件推送到设备上,请将(非APK)文件拖放到scrcpy窗口中。
/sdcard/Download/
没有视觉反馈,日志打印到控制台。
可以在启动时更改目标目录:
scrcpy --push-target=/sdcard/Movies/
音频不是由 scrcpy 转发的。使用sndcpy。
另请参阅问题 #14。
在下面的列表中,是快捷方式修饰符。默认情况下,它是(左)或(左)。MODAltSuper
可以使用 进行更改。可能的键是 、 、 和 。例如:
--shortcut-mod
lctrl
rctrl
lalt
ralt
lsuper
rsuper
# use RCtrl for shortcuts
scrcpy --shortcut-mod=rctrl
# use either LCtrl+LAlt or LSuper for shortcuts
scrcpy --shortcut-mod=lctrl+lalt,lsuper
Super通常是Windows或Cmd键。
行动 | 捷径 |
---|---|
切换全屏模式 | MOD+f |
向左旋转显示 | MOD+← (左) |
向右旋转显示 | MOD+→ (右) |
将窗口大小调整为 1:1(像素完美) | MOD+g |
调整窗口大小以删除黑色边框 | MOD+w|双击左键¹ |
点击HOME |
MOD+h|中键点击 |
点击BACK |
MOD+b|右键单击² |
点击APP_SWITCH |
MOD+s|第 4 次点击³ |
点击(解锁屏幕)⁴MENU |
MOD+m |
点击VOLUME_UP |
MOD+↑ (上) |
点击VOLUME_DOWN |
MOD+↓ (下) |
点击POWER |
MOD+p |
开机 | 右键单击² |
关闭设备屏幕(保持镜像) | MOD+o |
打开设备屏幕 | MOD+Shift+o |
旋转设备屏幕 | MOD+r |
展开通知面板 | MOD+n|第 5 次点击³ |
展开设置面板 | MOD+n+n|双击第 5 次³ |
折叠面板 | MOD+Shift+n |
复制到剪贴板⁵ | MOD+c |
剪切到剪贴板⁵ | MOD+x |
同步剪贴板和粘贴⁵ | MOD+v |
注入计算机剪贴板文本 | MOD+Shift+v |
启用/禁用 FPS 计数器(在标准输出上) | MOD+i |
捏合缩放 | Ctrl+点击移动 |
拖放APK文件 | 从计算机安装APK |
拖放非APK文件 | 将文件推送到设备 |
¹双击黑色边框以将其删除。
²右键单击将打开屏幕(如果屏幕已关闭),否则按返回。
³第 4 和第 5 个鼠标按钮(如果鼠标有)。
⁴对于开发中的 React 原生应用,MENU 会触发开发菜单。
⁵仅在安卓上 >= 7。
具有重复键的快捷键通过再次松开并按下键来执行。例如,要执行“展开设置面板”:
所有 + 键快捷方式都转发到设备,因此它们由活动应用程序处理。Ctrl
要使用特定的二进制文件,请在环境变量中配置其路径:
adb
ADB
ADB=/path/to/adb scrcpy
要覆盖文件的路径,请在 中配置其路径。
scrcpy-server
SCRCPY_SERVER_PATH
要覆盖该图标,请在 中配置其路径。
SCRCPY_ICON_PATH
一位同事向我提出挑战,让我找到一个像gnirehtet一样不可发音的名字。
strcpy
复制 string; 复制 screen。
scrcpy
请参阅构建。
请参阅常见问题解答。
阅读开发人员页面。
Copyright (C) 2018 Genymobile Copyright (C) 2018-2022 Romain Vimont Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
对于一般问题或讨论,你还可以使用:
r/scrcpy
@scrcpy_app
本自述文件的其他语言翻译可在维基中找到。
只有此自述文件保证是最新的。