程序人生 A log of my life

scrcpy

scrcpy是安卓上一个开源的投屏工具,把手机端屏幕实时投到pc上,pc端可以是跨平台的,windows、Linux、Mac都支持。最早我是用它来投屏来录制一些教学视频,这样可以将pc的桌面和手机画面很方便的同时录制下来。后来慢慢发现scrcpy远不止投屏这么简单,他还可以:

  • 控制手机,可以模拟几乎所有的触摸操作和手机上的按键。
  • 快速输入,可以方便的在pc上打字到安卓端。
  • 双向同步剪贴板。

而且所有的这些都不需要root,实在是方便,对我个人来说,我是微动手势、碎片记忆等多个App的开发者,常常需要在酷安上回复用户的问题,手机打字的效率让我倍感折磨,而酷安没有pc端可以用,所以我一直在寻找提高输入效率的方法和工具,我用过蓝牙键盘,尝试过安卓上一些支持远端输入的输入法,甚至想自己开发一个双向同步剪贴板的工具,直到最终使用scrcpy,我想应该是没必要再自己开发工具了。下面这张图来自官方,就是启动scrcpy之后弹出的手机端画面。

技术上来说,scrcpy是通过adb调试的方式来连接到手机,并将手机屏幕投到电脑上,同时可以通过pc控制您的安卓设备。因为adb是可以通过USB连接,也可以通过wifi连接。所以scrcpy也就具备了有线和无线两种连接方式,我在之前有个帖子专门详细描述了wifi连接adb的方法和好处,我在日常也一直都使用wifi来使用scrcpy,非常好用。

基本特性

下面是来自官方给的几个scrcpy的特性:

  • 轻量
  • 性能 (30~60fps)
  • 质量 (1920×1080 及以上)
  • 低延时 (35~70ms)
  • 启动速度快 (1秒左右出画面)
  • 非侵入性 (不需要在手机安装任何东西)

使用scrcpy的要求有以下几点:

  • 安卓设备至少需要API 21(Android 5.0以上版本);
  • 设备上需要启用了adb调试;

安卓手机的adb调试的开启一般是在开发者选项里,很多手机的开发者选项默认是隐藏的,需要多次点击手机系统版本,就可以看到了。

启动

下载对应你的操作系统的scrcpy版本,以windows为例,下载scrcpy,最新版本为1.13。

下载地址:https://github.com/Genymobile/scrcpy/releases

无需安装,解压就好。解压后的目录如下:

打开windows命令行程序(cmd),定位到此目录,确认手机端usb调试已经开启,然后手机通过usb或wifi连接到电脑。首次连接会弹出是否信任该电脑,点击始终信任即可。运行adb devices查看是否连接成功,如图:

然后运行scrcpy即可弹出手机画面的实时投射了。我在大部分情况下都使用无线连接,使用无线的话,由于带宽一般小于有线连接,而默认的scrcpy比特率比较高,这对于无线连接来说可能造成卡顿。还好scrcpy停供了一些命令行参数进行调节,降低比特率和分辨率,所以我实际上使用的命令行是:

scrcpy.exe -b 1m -m 1024 –prefer-text

-b和-m分别是控制带宽和分辨率的,可以根据自己的实际带宽情况调整, –prefer-text参数会在下面讲到。

控制手机

看到手机画面后,scrcpy提供了很多快捷键方便来控制安卓端,常用的大概有:

  • Ctrl+b 返回,或者可以按鼠标右键
  • Ctrl+h 桌面,或者可以按鼠标中键
  • Ctrl+s 多任务
  • Ctrl+p 手机电源
  • Ctrl+g 显示最佳窗口,或者可以双击手机画面外区域
  • Ctrl+上下键 调节音量
  • Ctrl+左右键 旋转屏幕
  • Ctrl+o 关闭设备屏幕,但pc端仍保持连接
  • Ctrl+c 将设备剪贴板复制到计算机
  • Ctrl+v 将计算机剪贴板粘贴到设备
  • Ctrl+shift+v 将计算机剪贴板同步到设备剪贴板
  • Ctrl+f 切换全屏模式

而且scrcpy通过鼠标对触摸的模拟很全面,长按和拖动都可以模拟,这让我挺诧异的,因为我自己开发的微动手势有个功能,就是模拟鼠标,我知道想要模拟一个拖放操作还是很困难的,但是scrcpy完美的做到了。基本上,熟练以后可以用scrcpy在pc上控制安卓做任何事情。

对游戏的支持

我不太玩游戏,scrcpy受到带宽的限制,看官方的帧率说是30-60fps,加上投射本身对cpu的占用,估计对游戏不会有太好的支持,除非是一些对帧率要求不高的休闲类游戏,否则在游戏上对scrcpy不要有太高期望了。

不过,scrcpy内置对按键的支持,所以如果一款游戏支持蓝牙键盘,那么就可以通过scrcpy使用pc键盘来玩。

输入法支持

scrcpy对我来说,最大的作用还是在于快速输入,可以用pc键盘完成酷安等app的文字快速输入,当然,要选择一个合适的输入法。经过测试,那些能蓝牙键盘有很好支持的输入法对于scrcpy也能很好的支持,可以大幅提高输入效率,我使用的谷歌拼音和讯飞输入法都能比较好的支持pc键盘的快速输入。

有时候,我们需要从pc端复制一些文字到手机端,比如在pc的浏览器上搜出的一些信息,要传到手机上,scrcpy提供了按ctrl-v可以将pc粘贴板直接粘贴到手机端,但是很可惜,这种方式是把文字转换为按键一点一点在手机端重放,也就是说还是通过安卓端的输入法“输”进去的。那么对于中文就完全不可行了,没办法直接复制。

而且就算是英文,scrcpy在缺省情况下,是通过模拟每个字符的按下和弹起来做ctrl-v的,这样的话,对于很多输入法,会导致粘贴的英文和实际输出的英文不一致的情况(比如很多输入法判断出首字母会自动大写),好在scrcpy提供了一个命令行参数–prefer-text可以通过字符的方式进行ctrl-v,而不是模拟按键,这样实测的结果是英文的粘贴基本没有问题了。

剪贴板同步

对于中文无法直接粘贴这个问题,scrcpy提供了另一个很好的解决方案,就是剪贴板同步的功能,按Ctrl-shift-v,可以直接把pc端的剪贴板同步到安卓端,然后直接到需要的地方再长按粘贴就可以了,但这个同步功能在scrcpy下载的最新版本上有bug,中文过多会传不过去,在发现这个bug之后,我给开发者提交了问题,仅过了三个小时,开发者就修复了这个问题,并且我拿到了下一个版本的预览,已经完美解决了这个问题,给开发者一个赞。

最新的1.14版本上,scrcpy引入了新的特性,可以借助安卓7以上提供的一个api,直接送出paste操作,也就是Ctrl-shift-v可以一步就把中文粘贴到设备上,更加方便了。

衍生项目

因为开源的特性,scrcpy也衍生了一些相关项目,列举其中一些:

  • QtScrcpy 使用qt重新实现的桌面端,并加强了对游戏的支持。
  • scrcpy-gui 为scrcpy的命令行提供了gui界面。
  • guiscrcpy 另一个scrcpy的gui界面。
  • scrcpy-docker docker版本的scrcpy
  • scrcpy-go go语言版本的scrcpy,增强对游戏的支持。