3 個動作,讓電腦可以「無線」控制 手機/平板

我之前有篇文章曾提到利用 Scrcpy 來讓電腦可以控制手機/平板:
https://yowlab.shps.kh.edu.tw/wordpress/?p=2194

本篇文章為延續上一篇文的紀錄。

在上一篇文中,談到要利用 Scrcpy 來讓電腦可以控制手機/平板,要先確認以下幾件事:

  1. 「手機/平板」要「啟動 USB 偵錯模式」(在 「設定」– 「開發人員選項」功能裡面)
  2. 確認「手機/平板」與「連線電腦」是在同一個網段
  3. 電腦端要安裝 adb 與 Scrcpy(詳情請閱 上一篇文章)

上篇文章,我要做的事情整個過程,動作大致如下:

  1. 手機/平板 利用 USB 線連接上電腦主機
  2. 啟動 adb server
  3. 利用「adb devices」找出 手機/平板 的裝置名稱(因為要利用裝置名稱,來啟動 手機/平板 的無線網路 連接埠)
  4. 啟動 手機/平板 的網路連接埠
  5. 讓 adb 透過網路(通常是 手機/平板 的無線網路 IP) 連接上 手機/平板,來取代 USB 連線
  6. 啟動 Scrcpy 並指定連接到 手機/平板 的 IP
在作這些動作的時候,我覺得很不開心的地方是:

  1. 常常要輸入「手機/平板的裝置名稱」
  2. 以及「找出並輸入手機/平板的無線網路IP」
  3. 若換了不同 手機/平板,就又要重新抓取「手機/平板的裝置名稱」以及「找出並輸入手機/平板的無線網路IP」

一直想要有沒有讓我可以「懶」一點的方法?
不用每次都輸入「手機/平板的裝置名稱」與「手機/平板的無線網路IP」。


在研究與實驗了幾次後,以目前跑 adb 連接方法的架構下,我寫了個 Shell Script(批次檔),可以作到以 3 個動作便可以無線投影:

  1. 手機/平板 使用 USB 線連接上電腦主機
  2. 輸入 Shell Script(批次檔) 命令
  3. 拔掉 手機/平板 連接的 USB 線

Shell Script(批次檔)內容如下:

  1. Linux, MacOSX 環境,可將底下內容直接存成 「 Mobie_to_PC.sh 」
  2. ##先關掉 adb sever 再重啟 adb server
    adb kill-server
    adb start-server

    ## 抓取行動裝置代號 ##
    export device_mobile=`adb get-serialno`

    ## 啟動行動裝置的網路連線開關,PORT 5555(這個可自行更改) ##
    adb -s ${device_mobile} tcpip 5555

    ## 停個 5秒鐘,讓裝置有反應時間
    sleep 5

    ## 抓取行動裝置IP ##
    #方法1. 利用 手機/平板系統 內建的 ip, grep 以及 外部電腦系統的 awk 一起協同工作
    #export device_mobile_ip=`adb shell ip -4 addr show wlan0 | grep ‘inet’ | awk ‘{print $2 }’| awk -F/ ‘{print $1}’`

    #方法2. 完全利用 手機/平板系統 內建的 ip, grep, cut 一起協同工作
    export device_mobile_ip=`adb shell ip -4 addr show wlan0 | grep inet | cut -d ” ” -f 6 | cut -d / -f 1`

    ## 連接行動裝置 ##
    adb connect ${device_mobile_ip}

    ## 將行動裝置投到電腦螢幕
    scrcpy -s ${device_mobile_ip} &

    影片示範:


  3. MS Windows 環境,可將底下內容直接存成 「 Mobie_to_PC.bat 」
  4. @echo off
    ::cd C:\Users\chungyu\Downloads\scrcpy\

    ::Stop adb sever, and start adb server again
    adb kill-server
    adb start-server

    ::Get Mobile device Name
    adb get-serialno

    set /P device_mobile=Above is your Mobile Device name, Please input:

    ::Turn on Mobile device Net-Communicatin-Switch and via port 5555
    adb -s %device_mobile% tcpip 5555

    ::Get Mobile device Wlan IP
    timeout /T 5 /NOBREAK
    adb shell ifconfig wlan0 | findstr -v “inet6” | findstr “inet”

    set /P device_mobile_ip=Above is your Mobile Device IP, Please input:

    ::Connect Mobile device via IP
    adb connect %device_mobile_ip%:5555

    ::Scrcpy connect to Mobile Device
    scrcpy -s %device_mobile_ip%

    影片示範:


  5. 在 MS Windows 環境下,如果已經知道「行動裝置名稱」(例:BTS12345678),以及 「行動裝置的IP」(例: 192.168.0.100) 後,就可直接寫進批次檔內,變成真正全自動。可將底下內容直接存成 「 Mobie_to_PC.bat 」
  6. @echo off
    ::cd C:\Users\chungyu\Downloads\scrcpy\

    ::Stop adb sever, and start adb server again
    adb kill-server
    adb start-server

    ::Turn on Mobile device Net-Communicatin-Switch and via port 5555
    adb -s BTS12345678 tcpip 5555

    ::Connect Mobile device via IP
    timeout /T 5 /NOBREAK
    adb connect 192.168.0.100:5555

    ::Scrcpy connect to Mobile Device
    scrcpy -s 192.168.0.100


此次研究心得:

  1. 以 Shell Script(批次檔)而言,unix-like 底下的 shell(eg: Bash, Tcsh, …)功能,確實比 MS-Windows 的功能強大與具彈性。
  2. MS-Windows 批次檔內容中只要有中文字(甚至僅是「註解」),不知為什麼,一執行就會出現錯誤!所以,我完全放棄在 批次檔中出現中文!
  3. MS-Windows 的命令(不管是內部命令或外部命令)執行結果,無法直接拿來當「變數」,對我而言,這在批次檔的撰寫與執行,是很高的難度,研究了不少時間後,我決定放棄,因此 MS Windows 的批次檔嚴格來說只是半自動。

參考資源

  1. 讓電腦可以控制手機/平板–Scrcpy
  2. adb 透過 Wi-Fi 連線裝置
  3. Android系統內隱藏的「開發人員選項」特殊工具,讓你把手機調校的更好

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*