架設/搭建雲手機 (Android in Cloud) 的意思就是在電腦上跑Android系統,並透過手機客戶端APP遠端連線操控。
用性能比較強的主機負責跑遊戲,甚至掛機,本機只要串流畫面遊玩,這樣既省電又能滿足需求,算是商業版雲手機的主要賣點之一了,但其實雲手機完全是能用開源軟體架在自己電腦上的。
這裡有一個實際示範影片:
在這篇文章,讓我們來看看Scrcpy的客戶端有哪些選擇,並示範如何用iPhone連線到自架的「Android雲手機」。
1. 自架雲手機的理由?#
市面上的雲手機,多半是向一間公司購買運算資源的訂閱制服務,跟PC上的串流遊戲十分類似。主要是讓使用者方便掛機,或者使用較弱的終端遊玩需要高級硬體的手機遊戲。
雲手機可不可以自架?當然可以,擺脫商業雲手機設下的種種使用規定。
你說用TeamViewer再加上Bluestacks,不就可以遠端玩遊戲了嗎?是這樣沒錯,但是我想要類似市面上雲手機的操作模式又可以擺脫商業軟體,故尋求Bluestacks模擬器以外的替代方案。
並且我不想讓雲手機只侷限在Windows系統上,我要讓Linux也可以架起雲手機。
故我的方案以Linux為主,並善用Linux上的開源Android模擬器方案。此處的Linux指的是Ubuntu、Fedora、Arch Linux、openSUSE這種的,不包含ChromeOS。
2. 準備硬體#
手機:任一台iPhone或Android手機,網速不要太慢。
電腦:Linux系統。
電腦端的網路上傳速度至少要10MB/s以上。
關於x86與ARM架構電腦的抉擇:雲手機就是要架在電腦伺服器上的,才可以永遠在線上。不考慮「把一支現有手機拔電池改造成雲手機」的土砲作法,焊電容太難了呀。先別想租伺服器,就用手上的零件開工吧。
x86好處是易取得,現有電腦改裝就行。x86效能好,方便擴充硬體,多開遊戲方便。x86電腦加上獨顯效能秒殺市面上所有手機。但是x86主機很耗電,遇到ARM架構的APP也容易有相容性問題。若是x86架構的電腦,準備至少4核心CPU和8GB RAM給Android模擬器。
ARM好處耗能低,且與主流ARM架構的APK相容性佳,部份ARM電腦甚至可以直接跑起Android系統,而不用借助模擬器。但是ARM裝置效能多半較差,不可能多開。市面上一般人可以入手,又能裝Linux的ARM電腦最好就RK3588開發板了,處理器效能也頂多在Android中階手機的水準而已!因為性能因素就沒辦法多開了。
買Apple Silicon電腦來架雲手機的也許可以喔?至於RISC-V架構的Android還在宇宙飄,再等等。
3. 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或TailScale穿透內部網路,再用VPN連回自己家進入虛擬區網,就不需要去調數據機開通訊埠了。
讓我們先看看Scrcpy電腦客戶端:
- Scrcpy:最原始的版本,靠指令運作,可自由選擇編碼器和音訊。
- QtScrcpy:以Scrcpy為基礎研發,提供圖形化介面和按鍵映射指令稿的功能。
- WS Scrcpy:網頁運作的Scrcpy客戶端,部署到遠端伺服器後從手機瀏覽器登入就行,無需安裝客戶端。
Scrcpy手機客戶端:
- Scrcpy for Android by zwc456baby:Android版Scrcpy APP。
- Scrcpy Mobile by wsvn53:iOS版Scrcpy APP,價格1美金,也可以用側載的。
這樣全平台都有Scrcpy可用了。
不過注意不是每個Scrcpy客戶端都有實作傳輸音訊的功能,如果非常需要開箱即用的音訊,那麼你還有以下遠端遊戲的選項:
- RustDesk手機控制手機
- Sunshine遊戲串流,音訊可以傳過來。
4. 電腦架設Android雲手機的方案#
Linux的Android模擬器方案
接著便要考慮雲手機的軟體了。Windows有很多Android模擬器,不過很多都是閉源又廣告多的商業軟體。
Linux沒有這些東西,只有容器技術和虛擬機,參見Linux上的Android模擬器解決方案
其中,Waydroid和ReDroid跨架構,可以部署到x86和ARM架構的伺服器。
ReDroid因為網路跟Docker在一起比較好處理,而Waydroid很難從外網存取。
Android-x86虛擬機的方案只適用於x86架構的電腦。
5. 架設虛擬區域網路#
虛擬區域網路軟體讓控制端與被控制端組成虛擬內網。即使手機使用4G,也能夠連線到家中使用固網的電腦主機。
這裡以ZeroTier為例,只要設定一次後面就很快了。唯一的問題是延遲,所以ZeroTier不適合玩需要即時反應的遊戲。
到ZeroTier官網註冊帳號,接著在手機下載ZeroTier One的APP,電腦Android虛擬機也下載ZeroTier One客戶端。
到ZeroTier的後台建立一個新網路
把新網路的Network ID記下來
手機開啟ZeroTier APP,輸入Network ID,開始VPN連線。
在電腦端的Android開啟ZeroTier APP,輸入Network ID連線。
接著在Zerotier後台這邊會看到連線的裝置,勾選左邊的方框同意加入網路。
6. 連線到雲手機#
只要裝置有開VPN連線到ZeroTier的網路,就可以看到該虛擬區域網路下的其他裝置。例如從上圖可以得知電腦虛擬機的區域IP是
172.30.221.253
。因此在手機上的Scrcpy客戶端輸入
172.30.221.253
,通訊埠填5555
(Android的ADB通訊埠),連線到遠端Android。Zerotier預設會使用9993 UDP通訊埠,電腦防火牆開放該通訊埠可改善延遲。若實在不行的話就自架Zerotier伺服器吧。
如果你的Scrcpy不支援Sndcpy傳輸音效,得用PulseAudio傳送Linux音效到手機。
7. 實際操作體驗#
手機使用4G,電腦是家裡的固網,所以二者現處於不同網路環境下。
調整Scrcpy的位元率和解析度可改善lag情況。
連線後,Scrcpy支援多點觸控操作。iOS將APP放到後台可能會自己斷線,不過就算斷線了馬上連回去就行,因為Scrcpy能多個客戶端同時連線到Android系統。
使用手機Scrcpy遠端玩《碧藍航線》約一小時後耗電量約10%。
至於電腦的系統資源佔用歷史如下,戰鬥時才會飆高。
可以說電腦負責運算,鐵定耗電,ARM轉譯也吃記憶體,如果多開虛擬機掛機,也要考慮CPU效能負荷。
8. 總結#
這是給想搞雲手機的人一點思考方式。同樣,你大可不需大費周章架虛擬機,而是放一支備用Android手機在家裡,連線到ZeroTier,也是一個可行方案。