Mac—Scrcpy在Macbook上实现同屏/多屏协同操作安卓手机界面(支持 Win、Mac、Linux)

发布时间 2023-12-29 10:14:48作者: 小强找BUG

1、效果展示:就在那么一瞬间,就成功弹出了手机界面,真的是激动又兴奋,真的很有成就感耶~
而且,不单单是投屏,是协同投屏/同屏,电脑端也可以操控手机啦~

 

2、背景介绍

投屏功能已经满足不了现有需求了,投屏,只是把手机界面投屏到电脑上,但是,不能在电脑端操作手机界面。而且,隔壁华为的手机+华为的笔记本,手机跟笔记本贴一下,就能实现同屏,真的便捷又很香啊。就在想,能不能实现很香的同屏功能呢?于是百度搜索到了Scrcpy GUI

PS:顺便拓宽一下思路,如果想在电脑上使用 Android 应用,除了用 Genymotion、Parallels Desktop 等虚拟机软件跑个安卓系统外,也可以借助 Vysor 等工具将手机画面投屏到电脑上显示和控制。可惜 Vysor Pro 收费较贵,免费版广告又多。

 

3、Scrcpy GUI

下载、安装、连接、连接失败有报错一直连不上。于是乎,就仔细查看其连接要求,最终发现,Scrcpy GUI是基于Scrcpy的友好登录交互界面,也就是说,只安装Scrcpy GUI 是不够的。

 

4、介绍一下Scrcpy和Scrcpy-GUI

Scrcpy免费开源且免Root手机的电脑控制手机神器!它跨平台支持 Win、Mac、Linux,可通过 USB 数据线 (或WiFi) 连接电脑,将 Android 手机的画面“搬到”电脑上显示,还可以使用键盘鼠标实时操作你的安卓手机,可以互通剪贴板、电脑键盘打字、支持传输文件、安装程序、截图、录屏等特性。画面清晰流畅,基本无明显延迟,相比 Vysor 要付费后才能设置高码率,Scrcpy可以自定义视频码率。软件支持自动横屏。能让你拥有像华为「多屏协同」那样“在电脑上操作手机”的功能。

但Scrcpy 本身是个命令行软件,对很多人来说用起来并不是那么方便。异次元的读者 simon 特意为Scrcpy开发了一个直观简单易用的图形界面——「Scrcpy-GUI」软件。专门为 Scrcpy 提供可视化的操作界面的外挂工具,安装后能让 Scrcpy 变得跟日常普通软件那样简单易用,只需鼠标点点就能设置和调用软件的所有功能。比如,修改分辨率/视频码率、截图、录屏保存、自动检测数据线连接的设备、保存局域网中曾连接过的设备数据、持设备别名、国际化、系统托盘图标菜单等功能。Scrcpy-GUI 也是免费开源的,同时也能跨平台支持 Windows、macOS 和 Linux 等系统,绝对是 Scrcpy 的必备伴侣。

由于 Scrcpy-GUI 只是图形界面(它不包含 Scrcpy 本身),安装Scrcpy之后就能使用 GUI 界面进行连接使用了。

 

5、Scrcpy 使用方法:

使用 Scrcpy 你无需 ROOT 手机,也不需在手机上安装 APP,只需在手机系统设置里启用开发者下的“USB调试”( adb 调试) 即可。连接电脑的方式可选 USB 数据线连接或 ADB 无线 WiFi 连接。下面我们给大家提供一个 Scrcpy 的简单使用教程。 

Scrcpy 使用教程:

准备工作:

  1. 准备好 USB 数据线,安卓系统版本要求 5.0 以上
  2. 需要在手机端的系统设置里开启「开发者选项」及「USB 调试」选项。不同的手机开启方法不尽相同,找不到选项的话可以自行去搜索一下。
  3. Scrcpy需要使用adb驱动进行与电脑之间通讯,Windows 版的安装包里似乎已经包含了adb。你也可以手动从下载这个 ADB 命令行工具进行安装。

Windows 下载安装:

Windows 用户直接下载并安装,连接好数据线后,电脑上执行 scrcpy.exe 即可启动软件。首次连接时,手机上会问你是否允许它对设备进行调试,按下确认同意即可。

macOS 下载安装:

使用 HomeBrew 命令进行安装。其实 HomeBrew 的功能很实用,它可以帮助你非常简单地一键安装/卸载各种软件,包括 Scrcpy。

  1. 安装 homebrew: 通过命令行 (Terminal) 执行 ,如已安装可跳过
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 安装 Scrcpy: (如果网络太慢,可以考虑更换 Homebrew 国内源或使用代理),我安装的是1.23版本。
    brew install scrcpy
  3. 安装 ADB:如果你没有安装 ADB 命令行工具,那么也可以用 brew 来安装
    brew install --cask android-platform-tools
  4. 有线连接:使用 USB 数据线连接手机后,首次连接会在手机上问你是否允许它对设备进行调试,按下确认同意即可。再执行scrcpy即可实现有限连接。
  5. 无线连接:使用 USB 数据线连接手机后,首次连接会在手机上问你是否允许它对设备进行调试,按下确认同意即可。

    Scrcpy使用adb与设备无线通信,adb可以通过TCP/IP连接到设备

    brewadb tcpip 5555      #数据线连接状态下执行,开放无线连接端口5555
    adb devices           #查看电脑连接上的手机设备 e7dc3117就是有线连接设备的序列号ID拔掉设备数据线

    将设备连接到与计算机相同的Wi-Fi
    获取设备IP静态地址
    连接到您的设备 adb connect DEVICE_IP:5555 ,其中DEVICE_IP为设备ip地址。adb devices #查看电脑连接上的手机设备 192.168.1.111:5555就是无线连接设备的序列号ID执行 scrcpy 命令即可启动软件。可以直接执行scrcpy,也可以如下设置参数启动,这样就会更好的显示效果。

    scrcpy --push-target /sdcard/脚本 --always-on-top --max-size 600 --bit-rate 2M --max-fps 15 --display-buffer=30 -s 192.168.1.111:5555

    # --serial/-s                                        如果多手机连接到电脑,执行adb devices查看每一台设备对应ID,然后执行scrcpy -s设备ID 来连接使用指定的设备(可以是有线的设备序列号也可以是无线的)
    # --push-target /sdcard/foo/bar/          目标目录可以在启动时更改
    # --window-title ‘My device’                  窗口标题默认是设备模型,它是可以改变的
    # --window-x 100 --window-y 100         指定初始窗口位置
    # --window-width 800 --window-height 600  指定初始窗口大小
    # --window-borderless                          无边界禁用窗口装饰
    # --always-on-top                                保持窗口总是在顶部
    # --fullscreen/-s                                   应用程序可以直接在全屏启动,然后可以用 ctrl + f 动态切换全屏
    # --rotation 1                                        窗口旋转:0: 不旋转1: 逆时针旋转90度2: 旋转180度3: 顺时针旋转90度还可以通过 Ctrl + ← 和 Ctrl + → 动态更改旋转
    # --no-control/-n                                 只读,禁用控件 (可以与设备交互的所有东西,如输入键、鼠标事件、拖放文件)
    # --show-touches/-t                             显示触摸,对于演示,显示物理触摸(在物理设备上)可能很有用,Scrcpy提供了一个选项来在启动时启用该特性,并在退出时恢复初始值
    # --stay-awake/-Sw                              防止设备休眠
    # --turn-screen-off/-S                          关闭屏幕,可以使用命令行选项关闭设备屏幕,或在任何时候按 Ctrl + o
    # -display 1                                           显示,如果有多个显示器可用,可以选择要镜像的显示器
    # --bit-rate/-b 2M                                改变码率,默认的比特率是8mbps
    # --max-size/-m 800                            将宽度和高度限制为某个值 (例如1024,800等)
    # --max-fps 15                                      限制帧率,捕获帧速率可以被限制
    # --crop 1224:1440:0:0 #1224x1440          偏移量 (0,0)裁切,设备屏幕可以裁剪成只反映屏幕的一部分,这是有用的,例如反映只有一只眼睛的虚拟现实眼镜,如果–max-size也指定了,则裁剪之后应用调整大小
    # --lock-video-orientation 0                    锁定镜像的方向 0:自然方向 1:逆时针90° 2:180° 3:顺时针90°,这会影响录制方向
    # --record/-r  file.mp4/file.mkv                录屏,可以在镜像时录屏
    # --no-display --record file.mp4              录屏,在录屏时禁用镜像,用Ctrl+C中断录制,“跳过的帧”被记录,即使它们没有实时显示(出于性能原因),帧是设备上的时间戳,因此包延迟变化不会影响记录的文件
    # -Nr file.mkv                                      同上
    # --display-buffer=50                              #为显示增加 50 毫秒的缓冲,显示缓冲,可以加入缓冲,会增加延迟,但可以减少抖动。
    # --v4l2-buffer=500                                # 为 v4l2 漏增加 500 毫秒的缓冲,对于 V4L2 漏缓冲「只适用于Linux上」
    # --prefer-text                             
    # --hid-mouse/M                                    给手机虚拟一个物理鼠标箭头
    # --hid-keyboard/K                             给手机虚拟一个物理键盘,从而解决电脑端输入汉字报错的问题 

     

    其他功能说明:
    scrcpy --help 支持帮助
    文件拖动——安装APK,要安装APK,请将APK文件(以.apk结尾)拖放到scrcpy窗口
    文件拖动——推送文件到设备,要将文件推送到设备上的 /sdcard/,请将一个(非apk)文件拖放到scrcpy窗
    按 Ctrl + Shift + o (或者 POWER, Ctrl + p) 恢复
    输入控制,旋转设备的屏幕,按 Ctrl + r 在纵向和横向模式之间切换,注意,它只在前台应用程序支持所请求的方向时才旋转

    复制粘贴,可以在计算机和设备之间双向同步剪贴板
    Ctrl + c 将设备剪贴板复制到计算机剪贴板
    Ctrl + Shift + v 将电脑剪贴板复制到设备剪贴板(如果设备运行Android >= 7则粘贴)
    Ctrl + v 将计算机剪贴板粘贴为文本事件序列
    此外,每当Android剪贴板发生变化时,它都会自动同步到计算机剪贴板

    adb shell dumpsys display     # 在输出中查找我的显示id 可以检索显示id列表

 

  6. 到这一步就会显示手机镜像了,但是,我操作时出现了,scrcpy能显示手机屏幕不能控制屏幕

      本人的是小米手机,小米手机USB中有安全模式,要调试为允许才可以进行模拟操作

    小米手机开启开发者选项的步骤如下:

  1. )进入小米手机的【设置】,随后点击“我的设备”。
  2. )进入之后,在下方找到“全部参数”的选项,点进去,可以看到你的小米手机所有的配置、版本等信息都在这里,找到“MIUI版本”,随后连续点击它5到8次,知道弹出一个开发者模式成功开启的小提示。
  3. )最后退出“我的设备”,进入“更多设置”后你就会发现新出现了一个“开发者模式”,也就代表我们成功开启了!

    在这里插入图片描述

  7.如需切换回 USB 模式(有线模式),执行:adb usb
    使用情景:用无线模式抖动太厉害了,各种设置参数后效果会好一点,但是,还是不能达到隔壁华为的同屏(手机需要打开WiFi、NFC、蓝牙)效果。所以,改用数据线USB连接,效果确实很香。

   

下次登录操作:连接数据线+scrcpy -Sw 就可以了

  

 

  8.微信输入文字报错,只能发送拼音。分析并解决scrcpy无法正常输入中文的问题。

   

 我安装的是1.23版本。看到有一个博主是1.14版本的,也遇到类似错误,可能到1.23版本会有提高,但是,确实是没有完全解决。
下面介绍一下软件架构:

scrcpy相对于其他仅依靠adb shell screencap和adb shell input进行设备控制的软件,拥有更加优秀的性能,这得益于它的系统架构:


其中Server在每次启动scrcpy的时候运行于Android端,使用MediaCodec的API对采集到的画面进行编码,并使用多线程,通过Socket传输到PC。PC端则使用ffmpeg和SDL2对画面进行实时解码显示。其中Server使用Java开发,Client使用C开发。具体技术细节可以参考官方文档,此处不再赘述。

言归正传,scrcpy在Unicode文字输入方面一直存在巨大问题,从很久之前就有用户反馈无法输入ascii以外的文字(如#632,表现为PC端输入文字后,手机不显示,终端报错),而作者则在最近正式加入了对ascii字符的支持,但尚未合并到master分支(见#1426)。 

首先我们要了解一下SDL处理用户输入(以及其他事件)的流程:

(1)使用SDL_WaitEvent(&event)获取事件队列中的事件
(2)根据event->type对不同事件进行区分处理
这里的事件类型可以参考SDL2的官方文档:SDL_Event。

顺着这样的思路,我们很快就能找到scrcpy处理事件的相关代码:app/src/scrcpy.c

 

继续阅读源码,会发现prefer_text参数来源于启动时传入的--prefer-text选项,文档中这样描述这个选项:

Text injection preference There are two kinds of events generated when typing text: 
key events, signaling that a key is pressed or released; text events, signaling that a text has been entered. By default, letters are injected using key events, so that the keyboard behaves as expected in games (typically for WASD keys). 
But this may cause issues. If you encounter such a problem, you can avoid it by: scrcpy --prefer-text (but this will break keyboard behavior in games)
关于这个参数的解释写得非常抽象,仅描述了这一参数的行为和特殊情况下后果,并没有介绍这一参数的一般用途,难怪笔者一开始并未发现。

这里我们使用上文提到的分支d613b10efcdf0d1cf76e30871e136ba0ff444e6e进行重新构建,并在启动时携带--prefer-text参数:

将alpha字符和空格作为文本事件而不是键事件注入。
这避免了在组合多个键以输入特殊角色时出现问题,但破坏了游戏中alpha键的预期行为(通常是WASD)。

启动的时候添加上这个参数,连字幕也打不出来了。失败告终,但是,学习到东西,对scrcpy开源软件有进一步了解。之后是,发现了--key-board参数,是关于HID虚拟物理键盘的设置。
https://github.com/Genymobile/scrcpy

默认情况下,scrcpy使用安卓键或文本注入:它可以在任何地方工作,但仅限于ASCII。

或者,scrcpy可以在Android上模拟一个物理USB键盘,以提供更好的输入体验(使用AOAv2上的USB HID):虚拟键盘被禁用,它适用于所有字符和输入法。

然而,它只有在设备通过USB连接的情况下才能工作。

注意:在Windows上,它可能只在OTG模式下工作,而不是在镜像时工作(如果USB设备已经被另一个进程(如adb守护进程)打开,则无法打开该设备)。


下边有一个--hid-mouse参数,跟--hid-keyboard原理类似,是给手机虚拟一个物理鼠标箭头,但是,会把鼠标局限在手机镜像里,影像电脑本身的鼠标操控。

下次登录操作:连接数据线+scrcpy -Sw --hid-keyboard 就可以了

 

9.点终端,快捷键:Ctrl+c,那么可以退出应用。
或者点击手机镜像上的叉叉。
或者把连接线拔掉。

 

PS:报错解决

(1)brew install scrcpy 报错

 

 

解决:把brew升级一下,就会更新下载的库源/镜像。

 

然后,再运行安装命令就可以了

安装成功。

(2)如果提示 No formulae found in taps 意思是在库里面找不到,可以尝试下:brew doctor

 

然后会提示你执行
git -C $(brew --repo homebrew/core) checkout master
之后,说不定就可以在库里面找到了

 

6、Scrcpy-GUI 使用方法
这个没有调试成功,百度的结果说是,先安装Scrcpy-GUI,然后在其目录下安装Scrcpy,就可以直接使用GUI了。

前提条件:

  • 请确保 adb , scrcpy 均已正确安装并可使用
  • 请确保手机已打开 USB 调试,并已认证电脑调试

使用 USB 有线连接:

  1. 请确保手机已通过数据线连接到电脑
  2. 等待软件自动检测到设备
  3. 选中设备,点击打开选中的镜像
  4. 等待设备打开

无线连接:

  1. 请确保手机与电脑处在同一局域网
  2. 第一次无线连接时:
    请确保手机已通过数据线连接到电脑
    请确保只有一个手机通过数据线连接到电脑
    第一次需设置端口,以后连接手机,只需要添加手机的静态 IP 即可
  3. 输入手机的局域网IP地址(如果 IP 为 DHCP 分配,请更改为静态 IP)
  4. 点击开启无线连接
  5. 等待无线连接成功
  6. 选中设备,点击打开选中的镜像
  7. 等待设备打开

Scrcpy-GUI 快捷键列表:(也适用于Scrcpy)

Scrcpy-GUI 快捷键
操作 快捷键 快捷键 (macOS)
切换全屏模式 Ctrl+f Cmd+f
将窗口调整为 1:1 Ctrl+g Cmd+g
调整窗口大小以删除黑色边框 Ctrl+x | 双击黑色背景 Cmd+x | 双击黑色背景
设备HOME Ctrl+h | 鼠标中键 Ctrl+h | 鼠标中键
设备BACK Ctrl+b | 鼠标右键 Cmd+b | 鼠标右键
设备任务管理键 Ctrl+s Cmd+s
设备菜单键 Ctrl+m Ctrl+m
设备音量+ Ctrl+ Cmd+
设备音量- Ctrl+ Cmd+
设备电源键 Ctrl+p Cmd+p
点亮手机屏幕 鼠标右键 鼠标右键
关闭设备屏幕(保持镜像) Ctrl+o Cmd+o
展开通知面板 Ctrl+n Cmd+n
折叠通知面板 Ctrl+Shift+n Cmd+Shift+n
将设备剪贴板中的内容复制到计算机 Ctrl+c Cmd+c
将计算机剪贴板中的内容粘贴到设备 Ctrl+v Cmd+v
将计算机剪贴板中的内容复制到设备 Ctrl+Shift+v Cmd+Shift+v
安装APK 将APK文件拖入投屏 将APK文件拖入投屏
传输文件到设备 将文件拖入投屏 将文件拖入投屏
启用/禁用FPS计数器(stdout) Ctrl+i Cmd+i

 

 

 

 

参考:

ScrcpyGui下载:https://www.jb51.net/softs/725074.html#downintro2       

Scrcpy开源项目地址:https://github.com/Genymobile/scrcpy

GUI开源项目地址:https://github.com/Tomotoes/scrcpy-gui

官方下载:
 
Windows打包下载:(推荐)
32位:https://wwa.lanzous.com/iu5NVn7hn5a   <ignore_js_op> ScrcpyGui_scrcpy_adb_32bit.zip (76.54 MB, 下载次数: 0)
64位:https://wwa.lanzous.com/iZajQn7hnte   <ignore_js_op> ScrcpyGui_scrcpy_adb_64bit.zip (99.11 MB, 下载次数: 40) 

命令行安装过程参考:
https://www.jianshu.com/p/b8810edec812 

https://www.iplaysoft.com/scrcpy.html
https://github.com/Genymobile/scrcpy/blob/master/README.zh-Hans.md   官方安装和使用说明文档(更深入操作可参考这个)
https://blog.csdn.net/weixin_39925031/article/details/112458809    中文输入报错解决方案
https://tieba.baidu.com/p/6540071770                                          中文输入报错解决方案

 

生活其实也很简单,喜欢的就去争取、得到的就珍惜、失去的就忘记。