一、问题背景

近日博主在研究如何把博主自己的小米手机像华为荣耀手机可以在电脑上多屏协同,毕竟作为程序员在使用电脑时一般会在手机、电脑间来回操作,如果可以直接在电脑上操作手机将会极其方便程序员的工作,而Scrcpy电脑无线连接手机的功能便解决了这个问题,但是Scrcpy涉及到了ADB(Android调试桥)的相关知识,因此博主想把整个流程做一个串接。

二、Scrcpy电脑无线连接投屏手机

1.下载并安装Scrcpy

Scrcpy 是免费开源的投屏软件,支持将安卓手机屏幕投放在 Windows、macOS、GNU/Linux 上,并可直接借助鼠标在投屏窗口中进行交互和录制。
Scrcpy这名字的定义由来并未在Scrcpy的Github主页找到,为了方便记忆和拼读Scrcpy,博主假设Scrcpy的全称是Screen Copy。

Github的Scrcpy项目地址:https://github.com/Genymobile/scrcpy

Windows64位版本Scrcpy的下载:Scrcpy-win64-v1.12.1.zip

将Scrcpy安装包完全解压后,电脑端即完成配置。我们还需要在手机端开启 开发者选项 及 USB 调试。然后使用数据线将手机和电脑连接并允许 USB 调试,即可双击解压得到的 scrcpy.exe 文件进行有线投屏了。

2.把ADB和Scrcpy路径写入环境变量Path

在进行Scrcpy电脑无线连接投屏手机之前,我们最好先把ADB和Scrcpy路径写入环境变量Path,这样可以简化我们未来无线投屏的步骤。

细心的你如果仔细观察解压后的Scrcpy安装包的文件目录,里面包含adb.exe和scrcpy.exe两个应用程序。

Android 多屏同控 安卓手机多屏协同软件_ADB


因为Scrcpy的投屏功能必须借助咱们的ADB(Android调试桥),如果你不知道ADB是什么,你可以简单理解它为连接电脑和手机的桥梁,下文会有对ADB超级详细的介绍。

Scrcpy无线投屏必须使用ADB命令,而PowerShell命令行终端cmd.exe想要执行ADB命令必须要到ADB的安装目录下。那么每次无线投屏都要在命令行终端cmd.exe重使用cd命令跳转到ADB的安装目录下,这样操作会特别的繁琐,因此我们可以把ADB路径写入环境变量Path,这样我们只要打开命令行终端cmd.exe即可执行ADB命令,这样就方便多了。

Android 多屏同控 安卓手机多屏协同软件_Android 多屏同控_02


配置好ADB的环境变量后,我们在命令行终端cmd.exe输入adb version查看ADB版本,如输出ADB版本号便代表安装成功,如下就已经成功了。

Android 多屏同控 安卓手机多屏协同软件_linux_03

3.手机开启开发者选项及USB 调试

要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。

在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到设置 > 关于手机,然后点按版本号七次。返回上一屏幕,在底部可以找到开发者选项。

在某些设备上,“开发者选项”屏幕所在的位置或命名方式可能有所不同。

4.数据线将手机和电脑连接并允许USB调试

用数据线将手机和电脑连接并允许USB调试,再在命令行终端cmd.exe输入:

adb devices

adb devices是查询当前电脑连接的手机设备的命令,如果输入该命令后的输出结果类似下图,则代表ADB有线连接手机等设备成功。

Android 多屏同控 安卓手机多屏协同软件_java_04

5.设置手机的ADB网络监听端口

Scrcpy无线投屏时需要电脑、手机在同一局域网下,不仅不要手机的局域网IP地址还需要手机的端口号,而这个手机的端口号必须是在电脑连接到手机时通过ADB命令设置的。
在ADB有线连接手机成功后,在命令行终端cmd.exe输入:

adb tcpip 5555

adb tcpip 5555是设置ADB有线连接的手机设备的ADB网络监听端口号为5555。

6.拔出手机数据线,通过ADB命令无线连接手机

在设置好设置手机的ADB网络监听端口后,再在命令行终端cmd.exe输入:

adb connect 手机的局域网IP:5555

adb connect 手机的局域网IP:5555命令是把当前电脑通过ADB连接到局域网IP对应端口号下的手机设备。

如果你不知道你的手机的局域网IP,你可以参考下图博主我的小米手机是如何找到局域网IP的:设置-WIFI-已连接的WIFI的详细信息-IP地址。

Android 多屏同控 安卓手机多屏协同软件_java_05


如上图所示,博主小米手机的局域网IP是192.168.3.19,那么博主要在博主电脑上输入如下ADB命令无线连接手机的命令:

adb connect 192.168.3.19:5555

Android 多屏同控 安卓手机多屏协同软件_ADB_06

7.scrcpy命令运行scrcpy.exe即可无线投屏

你还记得我们在步骤1把ADB和Scrcpy路径写入环境变量Path吗,现在我们可以在命令行终端cmd.exe任意路径下输入scrcpy命令:

scrcpy

Android 多屏同控 安卓手机多屏协同软件_java_07


scrcpy命令便是运行scrcpy.exe,Scrcpy打开后便是我们的手机界面啦!

Android 多屏同控 安卓手机多屏协同软件_java_08

三、ADB(Android调试桥)

1.ADB(Android调试桥)的介绍

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。它是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令来从命令行终端调用客户端。
  • 守护进程 (adbd):在设备上运行命令。守护进程在每个设备上作为后台进程运行。
  • 服务器:管理客户端和守护进程之间的通信。服务器在开发机器上作为后台进程运行。

adb 包含在 Android SDK 平台工具软件包中。您可以使用SDK管理器下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。或者,如果您需要独立的 Android SDK 平台工具软件包,可以点击此处进行下载

2.ADB的工作原理

当您启动某个 adb 客户端时,客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它将启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。

然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护进程 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推

如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。

3.ADB的常见命令

ADB的常见命令有安装、卸载应用、模拟按键/输入、查看设备信息等,博主就不详细写了。
这些常见命令可以在Android开发者-用户指南-Android 调试桥 (adb)和adb下载安装及使用中深入了解。

参考文献:
[1]scrcpy - 手机无线投屏到电脑 [2]adb下载安装及使用 [3]Android 调试桥 (adb)