快轉到主要內容

如何自架開源雲手機,用手機Scrcpy APP連線控制

Linux系統 Self-hosting自架 Cloud Gaming Android-x86 Scrcpy Docker
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

架設/搭建雲手機的意思就是在電腦上跑Android系統,並透過手機客戶端APP連線操控。

用性能比較強的遠端裝置負責遊戲甚至掛機,本機只要串流畫面遊玩,這樣既省電又能滿足需求,算是商業版雲手機的主要賣點之一了,但其實雲手機完全是能用開源軟體架在自己電腦上的。

這裡有一個實際示範例子:

在本文中,讓我們來看看Scrcpy的客戶端有哪些選擇,並示範如何用iPhone的4G連線到自架的「Android雲手機」。

1. Scrcpy簡介
#

Scrcpy是由Genymobile開發,可以有線/無線投影Android手機螢幕到電腦上的開源軟體,主要用ADB進行通訊,畫面延遲低。

Scrcpy可以iOS手機遙控Android手機,也能遙控自架的雲手機。

因為Android 11以上的開發人員選項加入「無線ADB」的功能,因此除了用電腦控制手機外,Scrcpy其實還可以:

  • 用iOS裝置遙控Android手機,或是Android遙控Android
  • 用手機的Scrcpy連線到自架的「雲手機」
  • 對Android模擬器使用Scrcpy

以上情況假定Scrcpy和被遙控的機器處於同一Wifi網路環境下,靠192.168的區域IP連線。如果要不同網路下(例如出門)還能遙控,最簡單的方式就是用ZeroTier/Hamachi/TailScale穿透內部網路,再用VPN連回自己家進入虛擬區網,就不需要去調數據機開通訊埠了。

2. 測試環境
#

手機:iPhone SE 2016,2GB RAM

電腦:Gentoo Linux,核心版本5.19.16。分配4核心CPU和8GB RAM給Andoid-x86虛擬機。

3. 選擇Scrcpy客戶端
#

Scrcpy電腦客戶端有以下四個:

  1. Scrcpy:最原始的版本,靠指令運作
  2. QtScrcpy:以Scrcpy為基礎研發,提供圖形化介面和按鍵映射指令稿的功能
  3. GUI Scrcpy:以Scrcpy為基礎研發,提供圖形化介面和按鍵映射功能
  4. WS Scrcpy:在瀏覽器運作的Scrcpy客戶端

手機的Scrcpy客戶端有二個:

  1. Android版有 Scrcpy-android 甲殼蟲ADB助手
  2. iOS版有 Scrcpy Remote,價格1美金

這樣全平台都有Scrcpy可用了。

註:如果你不想用Scrcpy,那麼Rustdesk也是可以考慮的選項,見 RustDesk手機控制手機的做法。

4. 電腦架設Android雲手機
#

接著便要考慮雲手機的軟體了。Windows有很多Android模擬器,不過很多都是閉源又廣告多的商業軟體。

因此容器技術和虛擬機就是優先考慮選項,前者有 基於docker的Redroid 基於LXC的Waydroid,後者就是用QEMU跑Android-x86虛擬機。

第一二個方案容器效率很高,網路通訊埠比較好處理,ZeroTier會比較順暢。第三個方案好處是跨平台,QEMU能在Linux/Windows/macOS上使用。

為穩定度考量,我會選擇有內建Google Play的Android-x86 9.0作為雲手機的系統,該版本支援轉譯32位元的ARM App。現在蠻多手遊還支援32位元的,例如《WW2 Heroes》:

想要玩ARM64位元的手遊,可以裝Bliss OS 14.10 (Android 11),像《幻塔》、《原神》就確認可以執行:

至於如何架設虛擬機嘛…建議電腦使用Linux,GPU加速比較容易搞定。

Android-x86架設過程不難但冗長,煩請移步此文: BlissOS虛擬機安裝教學

5. 架設虛擬區域網路
#

虛擬區域網路軟體讓控制端與被控制端組成虛擬內網。即使手機使用4G,也能夠連線到家中使用固網的電腦主機。

這裡以ZeroTier為例,只要設定一次後面就很快了。唯一的問題是延遲,所以ZeroTier不適合玩需要即時反應的遊戲。

  1. ZeroTier官網註冊帳號,接著在手機下載 ZeroTier One的APP,電腦Android虛擬機也下載ZeroTier One客戶端。

  2. ZeroTier的後台建立一個新網路

  3. 把新網路的Network ID記下來

  4. 手機開啟ZeroTier APP,輸入Network ID,開始VPN連線。

  5. 電腦Android虛擬機開啟ZeroTier APP,輸入Network ID連線。

  6. 接著在Zerotier後台這邊會看到連線的裝置,勾選左邊的方框同意加入網路。

  7. 只要裝置有開VPN連線到ZeroTier的網路,就可以看到該虛擬區域網路下的其他裝置。例如從上圖可以得知電腦虛擬機的區域IP是172.30.221.253

  8. 因此在手機上的Scrcpy客戶端輸入172.30.221.253,通訊埠填5555,連線到虛擬機。

  9. Zerotier預設會使用9993 UDP通訊埠,電腦防火牆開放該通訊埠可改善延遲。若實在不行的話就 自架Zerotier伺服器吧。

  10. 音效得開啟Termnux用ssh tunnel傳送。如果遠端的是Redroid,就得改用Sndcpy傳輸。

6. 實際操作體驗
#

手機使用4G,電腦是家裡的固網,所以二者現處於不同網路環境下。

調整Scrcpy的Bitrate和解析度可改善lag情況。

連線後,Scrcpy支援多點觸控操作。iOS將APP放到後台可能會自己斷線,不過就算斷線了馬上連回去就行,因為Scrcpy能多個客戶端同時連線到Android系統。

使用手機Scrcpy遠端玩《碧藍航線》約一小時後耗電量約10%。

至於電腦的系統資源佔用歷史如下,戰鬥時才會飆高。

可以說電腦負責運算,鐵定耗電,ARM轉譯也吃記憶體,如果多開虛擬機掛機,也要考慮CPU效能負荷。

7. 總結
#

這是給想搞雲手機的人一點思考方式。同樣,你大可不需大費周章架虛擬機,而是放一支備用Android手機在家裡,連線到ZeroTier,也是一個可行方案。

相關文章

Android-x86 QEMU虛擬機安裝教學,在Linux上執行手機APP,支援GPU加速的VM
Linux系統 虛擬機與容器技術 Android-x86 Linux QEMU VirGL Scrcpy
取代Google搜尋引擎的一些選擇:去中心化的YaCy和Presearch
Linux系統 Self-hosting自架 Search Engine Google Search
如何自架Whoogle搜尋引擎,防範隱私被Google搜尋窺探
Linux系統 Self-hosting自架 Search Engine Google Search

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。