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

 

生活其實也很簡單,喜歡的就去爭取、得到的就珍惜、失去的就忘記。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章