Mac—Scrcpy在Macbook上實現同屏/多屏協同操作安卓手機界面(支持 Win、Mac、Linux)


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                                          中文輸入報錯解決方案

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM