参考链接
[1]. scrcpy在Github上的官方项目站点
[2]. scrcpy v2.1.1的官方下载链接
[3]. 锐连官方网站
[4]. 锐连网页控制端
scrcpy的技术分析
相信熟悉Android
开发的同学都听说过电脑控制手机神器scrcpy
。它是github
上一个开源项目,它拥有超多的关注,截至23年下半年,已经有将近100 K的星星。它的作者是Genymobile
,也就是大名鼎鼎的安卓模拟器Genymotion
的开发商。
原来越多的办公室一族喜欢使用scrcpy
来同屏控制自己的手机,这样可以利用手机软件的丰富(并且少病毒),享受电脑的大屏,同时还可以使用键盘和鼠标来轻松控制自己的手机(想象一下,抢红包的时候,是鼠标点得快还是指头戳得快)。
scrcpy
利用PC
上运行的adb-server
作为桥梁,在安卓手机中运行一个基于命令行的Java
程序。同时利用adb
命令在电脑和手机间建立一个虚拟的基于adb link
网络连接。这个以shell
身份运行的命令行程序,通过virtual display
截取屏幕数据,通过InputManagerService
向手机注入控制事件,从而实现了远程浏览和远程控制。
虽然用到了adb
,但是从Android 11
开始,并不是一定要通过USB
线连接的。Wireless adb
使得开发者可以直接通过Wifi
和手机建立adb
连接,这样也使得scrcpy
能够摆脱线缆的束缚,可以无线连接。
手机屏幕往往具有较大的分辨率,对于桌面数据,如果不经过视频编码,直接传递的话,即使是像USB
或者LAN
这样的高质量连接也难以承受。scrcpy
使用FFMpeg
进行视频数据的编码压缩。
注意:
scrcpy
项目中,程序模块主要分为两块。一块名为server
,是运行于手机的命令行程序;另一块名为app
,是运行于PC
或者Mac
上的应用程序。所以熟悉安卓应用开发的同学刚开始看到会比较迷糊,传统安卓开发中,app
是运行于手机上的程序。
从实际是用来看,scrcpy
使用非常方便。打开手机开发者选项,启用USB
调试,将手机用USB
线连接到电脑。电脑上下载scrcpy
,点击运行,自动会调用预置的adb
应用,然后建立虚拟网络连接。将server
模块push
到手机中开始运行,运行于电脑上的app
就可以连接到server
了。
但是scrcpy
也有其明显的缺点,最明显的就是依赖基于USB
线缆或者wifi
的adb
连接。基于USB
线缆的话,手机只能放在电脑旁边;基于wireless adb
的话,也必须保证在一个局域网中访问。这两个限制都让手机的物理使用位置受限,尤其是对无人值守的来说,几乎成为不可能完成的任务。
锐连架构的改进
锐连是一款类似于scrcpy
的软件。它和scrcpy
一样,截取手机屏幕显示进行视频编码,在控制端解码显示;在控制端获取键盘鼠标事件发送给被控手机,实现手机的远程控制。
但最重要的是锐连会使用运行于电脑上的adb-server
来进行被控端和控制端的连接。它实现了一个运行于手机内部的adb-server
,后面为了区别于标准的adb-server
,我们称为adb-remobax
。这个adb-remobax
运行在手机内部,拜托了对电脑的依赖。为了提高性能并减少资源耗用,这个模块使用rust
编写。换句话说,将PC
上的功能下移到手机端。这样,adb-remobax
可以通过因特网连接与控制端通信,从而突破了控制端和被控端的局域网限制,也不再依赖于电脑的存在。
参见下图,一般的结构中,控制端和被控端直接使用adb
连接,这种连接只能基于USB
和LAN
。而在锐连的架构中,控制端和被控端通过adb-remobax
做桥梁进行连接。
注意:这种方式必须基于wireless adb
的方式。但是无线adb
是android
11才引入的新功能,为了能够让Android 10
及其以下的手机能够激活adb模式,锐连也提供了使用USB
的方式来激活。这种情况下,需要一个辅助的电脑或者支持OTG
的手机。
锐连的特点
和scrcpy
一样,锐连具有如下特点:
- 支持键盘直接输入(通过
InputManager
直接注入); - 支持鼠标滚轮输入(通过
InputManager
直接注入); - 支持控制端和被控端的剪贴板自动同步;
- 支持隐私屏(在远程控制过程中,物理屏幕始终关闭);
- 支持远程操作的时候同时录制屏幕(因为不是标准的
MediaProjection
); - 支持远程点亮和关闭屏幕;
锐连除了上述网络访问方式的改进以外,还有一些自己的特点。
首先是方便。除了前面说到的互联网访问外,锐连的控制端支持浏览器访问、微信网页访问和微信小程序访问。这种情况下,控制端无需安装任何应用,更加的绿色清洁。不管是PC
还是手机、不管是Windows
、Mac
、安卓还是iOS
,都可以随意对被控设备进行控制。值得一提的是,为了不给用户增加安装软件的负担,即使是基于USB
的adb
激活过程,锐连也是使用网页来进行,不会给您的电脑带来任何软件负担。可以参考下图:
其次是小巧。被控端只需要安装一个10MB左右的软件即可实现远程控制,这在日益臃肿的巨型apk中可谓一股清流。尤其是很多被控手机是比较旧的被淘汰机,小巧的apk
和高效的运行效率,不会给这些机器带来过多的负担。
还有就是性能。互联网的连接结构更加复杂,不像基于USB
或者LAN
的访问,有固定的优秀的带宽可以使用。在互联网上,网络连接质量可能较差或者一直变化,此时锐连会在显示效果和流畅性之间做出平衡,保证用户有较良好的体验。
最后就是易用性。主要有这些特点:
- 锐连专业版支持无人值守,也就是说,把手机放在办公桌上,即使在家也可以发起远程访问,按照指定的设置可以自动接受连接。无人值守功能打开后,可以设定多长时间自动接受。
- 可以设置是否使用隐私屏;
- 可以设置远程连接后中是否自动静音;
- 可以设置远程连接断开后是否自动锁屏;
锐连的版本
需要注意的是,远程控制的最重要两个场景,一个是远程协助,一个是远程办公。这两个场景的用户群是完全分离的,如果把这两个功能放在一个程序中,将导致彼此的不适应。所以锐连推出了两个版本:
- 锐连(或者叫标准版);
- 锐连专业版;
标准版针对不熟悉手机操作的人士特殊设计,使用起来更加简洁。尤其是远程引导功能,除了能够帮助老人,还能远程教会老人使用手机,毕竟授人以鱼不如授人以渔。这是一种难得的人文关怀,让老年人也能够享受自己掌握智能手机用法的喜悦。
而专业版具有无人值守功能,更加适合远程办公。各种设置也更加灵活丰富。
两者的账号是相通的,可以使用同一个账号给父母安装标准版,使用同样的账号给自己的备用机安装专业版。给老年人不要安装专业版,避免不必要的安全风险。
注意事项
有一点就是开发者选项带来的安全风险。使用开发者模式运行的程序具有shell
权限,它不是一般的普通权限。对于开发人员而言,会明白自己的操作带来的风险。但是对于普通用户,尤其是对手机不专业的用户,需要稍微谨慎一些。当然,锐连也提供了不打开开发者选项
的方式来提供服务,建议普通用户使用这种模式。
锐连控制端无需安装任何app,最方便的是使用微信小程序控制。在微信中搜索“锐连”小程序打开即可访问。
需要重点强调一下,国产手机针对安卓都有耗电方面的优化。而锐连为了保证在后台随时待命而进入服务状态,必须针对国产手机进行电池、自启动、后台查杀方面的设置。具体可以在锐连的账户页点击“兼容性设置”菜单项来了解。如果这方面的设置没有设置好,可能出现使用一段时间后,被控端掉线;或者在半夜的时候,被控手机再也没有响应等等问题。