摸鱼是每个打工人的修养,我们在平时工作中一般都需要对着电脑屏幕,但是由于社交娱乐等需求的移动化,如果一直低着头玩手机,就会被老板认为需求不饱和,即使是像我一样的移动客户端开发者也不例外。

iOS 开发者因玩手机被辞退

将摸鱼方式搬到电脑中刻不容缓。

模拟器是一个很好的替代品,但是许多应用都需要登录才能使用,这样我们就需要经常在手机和模拟器之间切换账号,很不方便。

如果能将手机投影到电脑中,并且能够通过键盘鼠标操作手机,岂不美哉。

Scrcpy

『Scrcpy』是由法国专门研究企业版 Android 虚拟化工具的著名企业 Genymobile 开发的 Android 投屏工具,Genymobile 这个公司可能很多人没听说过,不夸张的说,它开发的名为『Genymotion』的 Android 模拟器做得甚至比 Google 官方都要受欢迎,有机会的话以后也可以唠一唠。

说回『Scrcpy』,它是一款通过 ADB 调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制 Android 设备的投屏工具,支持 Windows、macOS 和 Linux 等桌面平台,可以通过 USB 或者 Wi-Fi 连接设备,不需要在手机上安装任何软件,也不需要 ROOT 权限,同时还拥有高性能低延迟等优点。

官方是这样总结的:

It focuses on:

  • lightness (native, displays only the device screen)
  • performance (30~60fps)
  • quality (1920×1080 or above)
  • low latency (35~70ms)
  • low startup time (~1 second to display the first image)
  • non-intrusiveness (nothing is left installed on the device)

重要特性:

  • 轻量(原生,仅显示设备屏幕)
  • 性能(30 ~ 60 fps)
  • 画质(1920×1080 或以上)
  • 低延迟(35 ~ 70 毫秒)
  • 启动快(约 1 秒内显示第一帧图)
  • 非侵入(无需在设备安装任何软件)

下面介绍如何使用。

要连接的 Android 设备需要满足一定的环境,首先确保 Android 设备系统为 Android 5.0(Lollipop,API 21)以上版本,其次要在手机上启用「USB debugging」。

「USB debugging」在「Developer options」中启用,而关于「Developer options」的启用方式,你可以在网上轻易找到,这里不再介绍。

需要注意的是,在某些设备上你可能还需要启用附加选项以使用键盘和鼠标进行控制,比如上图右边的 MIUI 系统则需要启用「USB debugging(Security settings)」选项,否则仅能投屏不能用键鼠操控;而上图左侧的 EMUI 系统则无需相关选项。

接下来在桌面平台安装『Scrcpy』。

Windows 平台安装十分简单,只需前往项目主页下载并解压即可,『Scrcpy』还很贴心的帮你在压缩包内准备了 ADB 工具,你无需自己去下载。

我非常建议你将其配置到环境变量,因为这样可以在任何地方随时启用『Scrcpy』。

假如你已经安装了『Chocolatey』软件包管理器,你还可以用更加极客的方式安装『Scrcpy』:

➜   choco install scrcpy
➜   choco install adb    # if you don't have it yet

『Scoop』也是可以的:

➜   scoop install scrcpy
➜   scoop install adb    # if you don't have it yet

macOS 平台的安装对于小白来说可能不太友好,因为它不提供 DMG 或 PKG 之类的安装文件,也没有像 Windows 一样提供 ZIP 压缩包,主要原因还是 macOS 设置环境变量要更加复杂,所以『Homebrew』是个很好的选择:

➜   brew install scrcpy
➜   brew install android-platform-tools   # if you don't have adb yet

Linux 平台同样是命令:

➜   apt install scrcpy

安装完成后,将 Android 设备通过数据线连接桌面平台,在使用『Scrcpy』之前,最好先用 ADB 监测一下 Android 设备是否连接成功:

➜   adb devices

如果设备列表为空,则应当确认一开始的前置条件是否满足。

设备连接成功后,就可以使用『Scrcpy』投屏了,也非常简单,只要在命令行中输入:

➜   scrcpy

『Scrcpy』便会启动,投屏窗口立即打开。

Scrcpy 投屏

这丝滑顺畅的感觉,比模拟器要舒服的多。

Windows 还支持双击「scrcpy.exe」文件启用,你可以为其创建快捷方式,那就可以在桌面直接打开了。但是…命令行不香吗?

当然,如果你仅仅是用来投屏的话,的确感受不到区别,但命令行可以将『Scrcpy』的功能发挥到极致。

比如,我可以限制画面的分辨率:

➜   scrcpy --max-size 1024
➜   scrcpy -m 1024  # short version

比如,我可以在启动『Scrcpy』的时候将 Android 设备的屏幕关闭:

➜   scrcpy --turn-screen-off
➜   scrcpy -S  # short version

很多时候我们的手机都会设置一段时间不操作之后休眠,这样如果我们在休眠后想再次使用『Scrcpy』操作设备,只能重新点亮设备,再回到电脑操作,就会很麻烦;如果手动设置休眠间隔,在使用完了又要重新设置回来,也不方便,那可以使用命令:

➜   scrcpy --stay-awake
➜   scrcpy -w  # short version

关闭屏幕以及防止休眠是可以组合使用的:

➜   scrcpy --turn-screen-off --stay-awake
➜   scrcpy -Sw  # short version

当连接了多台 Android 设备时,我们可以通过 adb devices 查询到设备 ID,然后投屏指定的设备:

➜   scrcpy --serial $device_id
➜   scrcpy -s $device_id  # short version

比如,在启动『Scrcpy』的时候将投屏窗口置顶:

➜   scrcpy ---always-on-top
➜   scrcpy -T  # short version

比如,我想全屏显示投屏窗口:

➜   scrcpy --fullscreen
➜   scrcpy -f  # short version

比如,我想投屏的时候,不允许使用键鼠操控:

➜   scrcpy --no-control
➜   scrcpy -n  # short version

比如,投屏的时候我还想录个屏,但是手机录完屏还要将视频文件传输到电脑非常麻烦,那我可以直接使用『Scrcpy』的录屏命令,它会将视频保存到当前终端所在目录,支持 MP4 和 MKV 格式:

➜   scrcpy --record file.mp4
➜   scrcpy -r file.mp4  # short version

假如我只是想录个屏,不需要用到投屏,那我还可以:

➜   scrcpy --no-display --record file.mkv
➜   scrcpy -Nr file.mkv  # short version

我们知道,在电脑上我们是可以用鼠标点击的,很直观能够知道具体的点击位置,但是在设备上操作时,点击位置的感知往往需要靠应用的动画反馈,『Scrcpy』可以将你在设备本机上的物理触摸也显示出来:

➜   scrcpy --show-touches
➜   scrcpy -t  # short version

假如我只想将设备屏幕的一部分投屏:

➜   scrcpy --crop 1224:1440:0:0   # 1224x1440 at offset (0,0)
➜   scrcpy -c 1224:1440:0:0  # short version

投屏窗口标题默认会显示设备型号,虽然不知道有啥用,不过如果你想修改,也是没问题的:

➜   scrcpy --window-title '$title'

不喜欢显示这个窗口外框,还可以去掉:

➜   scrcpy --window-borderless

你可以随意将文件拖到『Scrcpy』窗口以推送到 Android 设备中,在目前最新版本(V1.19)中,它会存放于 /sdcard/Download/ 目录,但在老版本(比如 V1.17)中则存放于 /sdcard/ 目录下,当然,你依然可以通过手动去设置这个存储路径:

➜   scrcpy --push-target=/sdcard/Movies/

我常用的配置参数大概就这些,更加详细的配置可以使用命令查看帮助,也可以翻阅官方文档。

既然提到它可以通过拖动文件到『Scrcpy』窗口来推送到 Android 设备,那更要提一个跟模拟器很相似的操作了,当拖入的文件类型是 APK 时,『Scrcpy』会自动帮你在 Android 设备上安装,十分方便。

『Scrcpy』还支持键鼠的快捷键,我在这里列举一些常用的热键:

Action Shortcut
切换全屏模式 MOD + f
调整窗口大小以移除黑色边框 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 + n | 鼠标的第 5 个键(如果有的话)
展开设置面板 MOD + n + n | 双击鼠标的第 5 个键(如果有的话)
折叠面板 MOD + Shift + n
复制到剪贴板(Android 7 以上设备支持) MOD + c
剪切到剪贴板(Android 7 以上设备支持) MOD + x
同步剪贴板并粘贴(Android 7 以上设备支持) MOD + v
以键盘事件序列注入电脑剪贴板文本 MOD + Shift + v

上表中的 MOD 一般指键盘的 AltCommand 键,当然你也可以使用命令修改:

➜   scrcpy --shortcut-mod=rctrl     # use RCtrl for shortcuts
➜   scrcpy --shortcut-mod=lctrl+lalt,lsuper     # use either LCtrl+LAlt or LSuper for shortcuts

更加详细的热键表可以使用命令查看帮助,也可以翻阅官方文档。

最后再简单提一下无线网络连接『Scrcpy』,实际上这是关于 ADB 的知识,因为 ADB 本身是支持无线连接的,所以这里并不打算介绍如何操作,你可以在网上搜索相关教程。连接成功后,正常启用『Scrcpy』即可。

考虑到无线连接稳定性可能不如数据线,你可以手动调整码率:

➜   scrcpy --bit-rate 2M --max-size 800
➜   scrcpy -b 2M -m 800  # short version
➜   scrcpy -b2M -m800  # short version

以上就是『Scrcpy』的常用功能介绍,而『Scrcpy』的实力远远不止这些,你可以前往其项目主页进行详细了解。

总的来说『Scrcpy』实现了在电脑前轻松处理手机端的事情的需求,开源免费,绝对是办公和摸鱼兼顾的利器。