ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

scrcpy 安卓投屏与远程控制全指南:ADB 安装、无线连接与参数调优

scrcpy 安卓投屏与远程控制全指南:ADB 安装、无线连接与参数调优 1. scrcpy到底解决了什么问题第一次接触 scrcpy 是在一个安卓自动化测试的小项目里。当时我需要在电脑上实时观察手机屏幕的变化同时用键鼠操作手机界面试过几款商业投屏软件要么画质糊得看不清细节要么延迟高到点一下要等半秒才响应还有的动不动就弹广告、要求装一堆驱动。后来同事丢给我一个 GitHub 链接说试试这个命令行里跑一行就行。从那以后scrcpy 就成了我电脑上的常驻工具。scrcpy 是一个开源的 Android 投屏与远程控制工具由 Genymobile 团队维护代码托管在 GitHub 上。它的核心定位非常明确把安卓设备的屏幕画面实时传输到电脑上显示并且允许你用电脑的鼠标和键盘反向控制手机。整个过程不需要 root 权限不需要在手机上安装任何客户端 App只需要开启设备的 USB 调试功能配合 ADB 就能跑起来。这意味着无论是开发调试、演示教学、直播录屏还是单纯想在大屏幕上刷手机它都能胜任。它解决的问题很具体。开发者调试 UI 时不用再歪着脖子盯手机小屏测试人员做兼容性测试时可以一边操作一边录屏留证做教程的人可以干净地录制手机操作过程没有水印也没有时长限制普通用户想用电脑键盘在手机上打字或者用鼠标玩手游它也能满足。适合的人群跨度很大安卓开发、测试工程师、产品经理、内容创作者甚至只是想把手机画面投到显示器上的普通用户都能从中获益。选择它最直接的理由是轻量。整个软件包解压出来不过几十兆启动速度以秒计资源占用极低。我实测在一台八年前的旧笔记本上投屏 1080p 画面 CPU 占用不到百分之十而同场景下某些基于浏览器内核的投屏方案能飙到百分之四十以上。这个差距在长时间使用时体感非常明显。当然scrcpy 也有它的门槛。它是命令行为主的工具没有华丽的图形界面参数需要手动敲或者写进脚本。但恰恰是这种设计让它的可定制性远超那些点几下鼠标就完事的商业软件。你几乎可以控制投屏的每一个细节分辨率、码率、帧率、是否显示窗口、是否录制、录制的格式与路径等等。对愿意花半小时熟悉参数的人来说这笔时间投资回报率极高。提示scrcpy 的官方仓库在 GitHub下载时应认准官方发布页的压缩包避免从第三方站点获取被二次打包的版本。2. 先搞清楚它的运行原理再动手装2.1 为什么一行命令就能投屏很多人第一次看到scrcpy敲下去手机画面就出现在电脑上会觉得有点魔法。其实背后的链路非常清晰拆开来看就三步。第一步scrcpy 启动时会调用 ADBAndroid Debug Bridge在电脑和手机之间建立一条数据通道。ADB 是安卓官方的调试桥只要手机开启了 USB 调试这条通道就能打通。scrcpy 会通过这条通道把一个轻量的服务端程序推送到手机里并在手机上启动它。第二步手机端的服务端程序调用 Android 系统自带的 MediaCodec 编码器把屏幕画面实时编码成 H.264 或 H.265 视频流。这里的关键在于编码工作是由手机的硬件编码器完成的不占用 CPU 做软编码所以手机端发热和耗电都很低。第三步编码后的视频流通过 ADB 通道传回电脑电脑端的 scrcpy 客户端负责解码并渲染到窗口里。同时电脑上的鼠标键盘事件会被捕获反向通过 ADB 通道送回手机由手机端的服务端注入为触摸或按键事件。理解了这个链路很多问题就顺理成章了。比如为什么必须开 USB 调试——因为要走 ADB 通道为什么无线连接要先插一次 USB——因为需要先通过 USB 把 ADB 切换到 TCP 模式为什么有的电脑打开就闪退——往往是 ADB 版本冲突或者缺少运行库导致通道没建起来。2.2 与其他投屏方案的横向对比为了让你更直观地理解 scrcpy 的定位我把常见的几类投屏方案放在一起做个对照。下面的对比基于我个人的实际使用体验不同设备环境下结果可能有差异。对比维度scrcpy系统自带投屏商业投屏软件浏览器内核投屏是否需装手机端 App不需要部分需要需要通常需要是否需 root不需要不需要不需要不需要延迟表现极低35-70ms中等中等偏高偏高画质可调性完全可调基本不可调部分可调有限可调是否支持录制支持无时长限制有限支持常需付费常需付费是否开源是否否否广告与捆绑无无常见常见上手门槛命令行偏高低低低从表里能看出来scrcpy 在延迟、画质控制和免费无广告这几点上优势非常突出代价就是上手门槛。但这个门槛其实没有想象中高熟悉之后你会发现它比商业软件更省心——没有登录、没有会员、没有弹窗。2.3 版本选择上的一个坑scrcpy 的版本迭代比较快2.x 版本之后支持了音频转发需要 Android 11 及以上这是很多老用户期待已久的功能。但在实际使用中我发现并不是版本越新越好。如果你用的是较老的安卓设备比如 Android 7 到 Android 9建议优先选择 1.x 的稳定版本新版本的部分特性在这些设备上反而可能引发兼容性问题。而如果你的设备是 Android 12 及以上用最新的 2.x 版本体验最完整特别是音频转发和剪贴板同步这两块。另外要注意的是 Win64 的压缩包命名。热词里提到的scrcpy-win64.zip就是 Windows 64 位平台的发布包格式下载后解压即可是绿色免安装的。千万不要去下那些所谓的汉化版增强版投屏工具本身不涉及复杂界面汉化没有意义反而可能引入来路不明的改动。3. 环境准备与各平台安装实操3.1 先把 ADB 环境理顺scrcpy 依赖 ADB但它发布包里其实已经内置了一份 ADB 可执行文件。这就带来一个常见的冲突你电脑上可能因为装过 Android Studio 或者 Android SDK已经有一份 ADB 在环境变量里而 scrcpy 包里又带了一份两者版本不一致时就会出现设备识别不稳定、连接时好时坏的问题。我的处理原则是如果电脑上已经有 Android SDK就把 SDK 的 platform-tools 目录加入系统环境变量 PATH然后删掉 scrcpy 目录里自带的 adb.exe让 scrcpy 调用系统的那一份。反过来如果电脑上没装过安卓开发环境就保留 scrcpy 自带的什么都不用动。验证 ADB 是否正常工作打开命令行敲adb version正常会输出类似Android Debug Bridge version 1.0.41的信息。如果提示不是内部或外部命令说明 PATH 没配好需要手动把 platform-tools 目录加进去。接着用数据线连接手机手机上会弹出是否允许 USB 调试的授权弹窗勾选始终允许并确定。然后在命令行敲adb devices如果输出里能看到你的设备序列号后面跟着device字样说明通道已经打通。如果显示unauthorized说明授权没点如果显示offline通常是数据线接触不良或者 ADB 版本冲突。注意有些数据线只供电不传数据插上后电脑完全识别不到设备。遇到死活连不上的情况先换一根确认能传数据的线试试这一步能省下大量排查时间。3.2 Windows 平台的安装步骤Windows 是最省事的平台官方直接提供编译好的压缩包。步骤如下。第一步去官方发布页下载scrcpy-win64.zip注意选对架构六十四位系统选 win64三十二位系统选 win32。现在三十二位系统已经很少见了。第二步解压到一个路径里没有中文和空格的目录比如D:\tools\scrcpy。路径里有中文虽然大多数情况下也能跑但偶尔会引发编码相关的奇怪问题能避免就避免。第三步把解压目录加入系统环境变量 PATH这样在任何路径下都能直接调用 scrcpy 命令。具体操作是此电脑右键属性高级系统设置环境变量在系统变量的 Path 里新增一条解压目录的路径。第四步打开新的命令行窗口敲scrcpy --version能输出版本号就说明安装成功。如果你的电脑打开 scrcpy 就闪退先别急着重装。这个问题我遇到过好几次绝大多数情况是两种情况之一一是 ADB 冲突按前面说的方法统一下 ADB 版本二是缺少 Visual C 运行库去装一个微软官方的运行库合集基本能解决。闪退时可以在命令行里手动执行 scrcpy这样报错信息会直接打印在窗口里比双击闪退能拿到的信息多得多。3.3 macOS 与 Linux 平台macOS 用户推荐用 Homebrew 安装一条命令搞定brew install scrcpy前提是已经装了 ADB可以用brew install android-platform-tools补上。Homebrew 的好处是后续升级只需要brew upgrade scrcpy。Linux 用户分发行版。Debian 和 Ubuntu 系可以直接sudo apt install scrcpy但要注意系统源里的版本往往偏旧如果想要音频转发等新特性建议从源码编译或者用官方提供的其他方式获取较新的版本。Fedora 系用sudo dnf install scrcpyArch 系用sudo pacman -S scrcpy。Linux 下有一个权限相关的坑普通用户可能没有访问 USB 设备的权限表现为adb devices里设备显示no permissions。这时候需要配置 udev 规则把安卓设备厂商的 USB 权限开放给普通用户。这个问题在 Ubuntu 上尤其常见配置一次之后就不用再管了。3.4 手机端的必要设置不同品牌的手机对 USB 调试的开放程度不一样。大部分手机需要在关于手机里连续点击版本号七次激活开发者选项然后在开发者选项里打开USB 调试。部分品牌还需要额外打开USB 安装或USB 调试安全设置才能让 ADB 正常注入事件。如果你发现能投屏但鼠标键盘控制没反应八成是这个开关没打开。还有一个容易被忽略的点手机的屏幕锁定状态。如果手机处于锁屏状态scrcpy 是可以显示画面的但控制功能会受限。建议在连接后先把手机解锁或者使用相关参数让投屏时保持屏幕常亮。4. 连接方式的完整操作流程4.1 USB 有线连接最稳的方式有线连接是延迟最低、最稳定的方式推荐所有新手从这里开始。操作很简单数据线插好后命令行直接敲scrcpy没看错就这一行。如果前面的 ADB 环境已经理顺设备也已授权这一行命令就能让手机画面出现在电脑窗口里。默认会以设备原生的分辨率显示码率是 8 Mbps帧率跟随设备刷新率。第一次运行如果卡住不动通常是手机端又弹出了授权窗口没点确定。看一下手机屏幕把授权点掉就行。有线连接下有个实用技巧默认情况下投屏时手机屏幕是保持点亮的这样会耗电。如果你希望投屏时手机屏幕熄灭以省电可以加上参数scrcpy --turn-screen-off这样电脑上能看到画面手机自己的屏幕是黑的既省电又避免了双屏同时亮着的干扰。4.2 无线连接摆脱线缆束缚无线连接是 scrcpy 使用频率很高的功能尤其适合手机离电脑有一定距离、或者需要边走动边操作的场景。前提是手机和电脑在同一个局域网里并且最好是同一个网段。第一步先用 USB 数据线把手机连上电脑确认adb devices能识别。第二步执行切换到 TCP 模式的命令adb tcpip 5555这个命令的意思是让手机端的 ADB 服务监听 5555 端口。执行成功后会提示restarting in TCP mode port: 5555。第三步查看手机的局域网 IP 地址。可以在手机的 WLAN 设置里看当前的 IP也可以在命令行用adb shell ip addr show wlan0找到 inet 后面那一串就是 IP。第四步拔掉数据线执行连接命令把 IP 换成你手机的实际地址adb connect 192.168.1.100:5555成功的话会显示connected to 192.168.1.100:5555。然后直接跑 scrcpy 就能无线投屏了。第五步如果你用的是 Android 11 及以上的设备还可以用更现代的无线调试方式在开发者选项里开启无线调试通过配对码配对这种方式不需要先插 USB。无线连接的稳定性受路由器质量影响很大。我实测在普通的家用路由器上1080p 投屏延迟大约在 60 到 100 毫秒之间日常操作完全够用但玩快节奏手游会感觉到轻微延迟。如果对延迟极其敏感还是回到有线。提示无线连接在电脑重启或手机重启后会失效需要重新执行一次adb connect命令。可以把这行命令写成一个批处理脚本双击即可重连省去每次手敲。4.3 多设备同时投屏做测试的人经常会同时连好几台手机。scrcpy 支持指定设备先用adb devices列出所有设备序列号然后scrcpy -s 设备序列号每台设备开一个 scrcpy 窗口互不干扰。如果设备太多记不住序列号可以配合--window-title参数给每个窗口起个好认的名字scrcpy -s 序列号 --window-title 测试机A这样任务栏里一眼就能分清哪个窗口对应哪台机器。我在做多机兼容性测试时习惯把不同分辨率的设备分别标注排查问题时效率高很多。5. 参数调优把投屏质量调到你要的样子5.1 分辨率与码率的取舍逻辑默认参数下 scrcpy 会以设备原生分辨率投屏这在千元机上没问题但如果是 2K 甚至 4K 屏幕的旗舰机投到电脑上反而会吃满带宽和解码性能导致卡顿。这时候就需要限制分辨率scrcpy --max-size 1024--max-size的含义是限制画面较长边的最大像素值scrcpy 会自动保持宽高比。比如你的手机是 2400x1080设置--max-size 1024后画面会被等比缩放到 1024x460 左右。这里有个计算逻辑值得说明。假设设备分辨率是 2400x1080长边 2400限制 1024 后缩放比例是 1024 除以 2400 约等于 0.427那么短边就是 1080 乘以 0.427 约等于 461。缩放是在手机端的硬件编码器里完成的不额外消耗 CPU所以性能影响很小。码率参数用--bit-rate控制单位是 bps。默认 8 Mbps 在 1080p 下画质已经不错。如果你要做高清录屏可以调到 16 Mbps 甚至 20 Mbpsscrcpy --bit-rate 16M但要注意码率不是越高越好。无线连接下码率过高会加重网络负载反而导致卡顿有线连接下则可以放心用高码率。我的经验是日常操作 4 到 8 Mbps 足够录屏留档用 12 到 16 Mbps追求极致画质再往上加。帧率方面默认跟随设备刷新率。如果你的设备是 120Hz 高刷屏可以用--max-fps 60限制到 60 帧能明显降低电脑端的解码压力画面流畅度对绝大多数场景来说依然够用。5.2 常用参数速查下面这张表是我日常用得最多的参数整理出来方便你按需取用。参数作用典型场景--max-size 1024限制分辨率长边低配电脑、无线连接--bit-rate 16M设置视频码率高清录屏--max-fps 60限制最大帧率高刷设备降负载--turn-screen-off投屏时关闭手机屏幕省电、防误触--stay-awake保持设备常亮长时间监控--window-title xxx自定义窗口标题多设备管理--record file.mp4边投屏边录制教程录制、测试留证--no-display不显示窗口只录制后台批量录制--fullscreen全屏启动演示、大屏观看--tcpip直接切换到无线快速无线连接录制功能特别值得一说。加上--record参数后投屏的同时会把画面存成文件格式由文件扩展名决定支持 mp4、mkv 等。如果配合--no-display就变成了纯后台录制屏幕上不弹窗口很适合做自动化测试时批量录像。录制文件的命名支持时间戳占位符这样多次录制不会互相覆盖。5.3 快捷键与操作映射scrcpy 的快捷键设计得很顺手掌握几个高频的就够用了。CtrlH模拟返回主屏相当于按 Home 键CtrlB模拟返回键CtrlS截图并保存到当前目录CtrlR旋转画面方向CtrlO关闭手机屏幕保持投屏CtrlP模拟电源键CtrlV把电脑剪贴板内容粘贴到手机其中CtrlV是我用得最多的一个。电脑上复制一段文字按一下就能粘贴到手机输入框里比在手机上慢慢戳键盘快太多。做测试填表单的时候这个功能简直是救命稻草。键盘映射方面默认情况下 scrcpy 会把电脑键盘的输入直接注入到手机。如果你用的是外文键盘布局可能需要调整。另外鼠标右键和滚轮也都有对应的安卓操作滚轮对应上下滑动右键对应返回键熟悉之后操作手机像操作电脑一样自然。6. 常见问题与排查实录6.1 打开闪退与黑屏scrcpy 有的电脑打开闪退是搜索量很高的问题我把遇到过的原因和对应解法整理成一张表。现象可能原因排查与解决双击后窗口一闪即退缺少运行库装微软官方 VC 运行库合集命令行报 ADB 相关错误ADB 版本冲突统一使用一份 ADB窗口出现但黑屏编码器兼容问题加--encoder指定编码器画面出现但无法控制未开 USB 调试安全设置开启对应开发者选项连接后提示 unauthorized手机授权未点击解锁手机点允许调试黑屏问题里编码器兼容是比较隐蔽的一种。部分设备的硬件编码器在特定分辨率下会输出异常表现为电脑窗口全黑或者花屏。可以用参数强制指定编码器或者干脆降低分辨率避开这个区间。我遇到过一台老设备在 1080p 下黑屏降到 720p 就正常了这类问题用参数规避是最快的办法。闪退排查的关键思路是让错误可见。双击 exe 闪退时你什么都看不到但在命令行里手动执行错误信息会完整打印出来。绝大多数闪退都能从报错信息里找到线索比盲目重装高效得多。6.2 延迟高与卡顿卡顿问题几乎都出在无线连接和参数设置上。按下面的顺序排查基本能定位到根因。先看是不是无线网络的问题。用手机 ping 一下电脑看延迟和丢包。如果 ping 值本身就高或者丢包严重那是网络环境的问题换频段或者靠近路由器能改善。5GHz 频段比 2.4GHz 稳定得多有条件就切到 5GHz。再看参数是不是设得太激进。高分辨率加高码率在有线连接下可能没事但无线下就成了负担。先把--max-size降到 1024--bit-rate降到 4M看卡顿是否消失。如果消失了说明是参数过高逐步往上加找到平衡点。最后看电脑端性能。解码是吃 GPU 的老电脑的核显解码 1080p 高帧率可能吃力。这时候降低帧率参数能立竿见影。还有一种情况是电脑同时开了太多占资源的程序关掉一些后台程序试试。6.3 输入法冲突与粘贴失效用电脑键盘往手机里打字最常遇到的问题就是输入法冲突。电脑上中文输入法的候选词框会出现在电脑屏幕但实际注入到手机的是英文字符导致体验割裂。比较稳妥的做法是需要往手机输入中文时先在电脑上把文字打好复制用CtrlV粘贴到手机。这样绕开了键盘注入和输入法解析的环节兼容性最好。这也是我前面强调CtrlV高频使用的原因。剪贴板同步偶尔会失效尤其是跨设备复制大段文本时。这种情况通常和手机端的权限限制有关部分系统对后台应用读取剪贴板有严格限制。遇到失效时重启一次 scrcpy 连接往往就能恢复。6.4 连接频繁掉线的处理无线连接用久了偶尔会掉线表现是 scrcpy 窗口还在但画面卡死或者直接报连接断开。原因多半是手机端的 ADB 服务被系统回收了安卓系统为了省电会杀掉后台进程。缓解办法有几个。一是把开发者选项里的USB 调试相关设置保持开启部分系统有始终保持 ADB 连接之类的选项。二是在手机的电池优化设置里把与调试相关的服务排除在省电优化之外。三是掉线后重新执行adb connect即可恢复不用重新插线。有线连接掉线则多半是数据线松动或者接口接触不良。换一根质量好的原装线问题基本解决。劣质数据线的电压不稳长时间使用可能还会损伤手机接口。7. 我在实际使用中攒下的几点体会7.1 把它做成脚本效率翻倍scrcpy 参数多每次手敲不现实。我的做法是把常用场景写成批处理或者 shell 脚本。比如一个无线高清录屏脚本里面固定好分辨率、码率、录制路径这些参数需要时双击运行即可。Windows 下可以写个 bat 文件内容大致是先adb connect 手机IP:5555然后scrcpy --max-size 1024 --bit-rate 12M --record 录制文件.mp4。这样一键完成连接加录制比每次都手动敲省事太多。Linux 和 macOS 下写个 shell 脚本逻辑一样。更进一步如果你有多个常用设备可以给每个设备写一个脚本文件名就用设备名需要投哪台就点哪个。多设备测试时这套方法帮我省下了大量重复操作。7.2 分辨率不要盲目追高新手容易犯的一个错是觉得投屏分辨率越高越好把参数拉满。实际上投屏的目的是看得清、操作顺而不是追求像素数。电脑上一个窗口能显示的像素是有限的把 2K 画面投到占屏幕三分之一的小窗口里多出来的分辨率肉眼根本分辨不出来白白消耗带宽和性能。我现在的习惯是日常操作限制在 1024 或 1280录屏留档才开到 1600 以上。这个取舍在无线连接下尤其重要能显著改善流畅度。7.3 音频转发的使用边界scrcpy 2.x 支持音频转发后很多人想用它来投音乐、投视频。但要注意音频转发对设备和系统版本有要求Android 11 以下基本用不了。而且音频的采样率和延迟和视频流不一样追求音画同步的场景比如玩游戏体验未必比得上专门的方案。我的建议是音频转发适合顺便听个响的场景比如投个播客、听个语音消息。对音质和同步有严格要求的还是走设备本地的音频输出更靠谱。想清楚使用边界就不会对它有过高期待。7.4 保持版本更新的习惯scrcpy 的迭代挺活跃新版本经常带来实用改进——更好的编码器兼容性、更低的延迟、更完善的音频支持。我一般每隔一两个月去官方发布页看一眼有没有新版本。升级的方法很简单Windows 直接下新的压缩包覆盖旧目录配置文件一般不在目录里覆盖不会丢设置macOS 和 Linux 用包管理器升级。升级后如果出现新问题回退到上一个稳定版本也很容易保留一份旧版本的压缩包即可。还有一点安卓系统大版本更新后偶尔会和 scrcpy 出现新的兼容问题。这种时候通常等官方跟进发布新版本就好不用自己折腾编译环境。去官方仓库的 issue 区搜一下大概率已经有人遇到并讨论过了。我自己用 scrcpy 这两年从最初的能连上就行到现在会根据不同场景配好不同参数脚本它在我的工作流里已经从一个可选项变成了基础设施。它没有花哨的界面但把投屏这件事做得足够稳、足够快、足够自由。这种工具就该这样的朴素体验恰恰是它最打动我的地方。
返回列表