要在Linux系統跑Android APP,Ivon在Linux的Android模擬器一文提過多種方案。本篇文章Ivon要介紹Android-x86分支「Bliss OS」。
Bliss OS算是Android-x86的改進版,可以安裝在實體機和虛擬機,支援許多新硬體,例如Intel 10代處理器以後的GPU。Android版本也有更新,目前穩定版是Bliss OS 14 (Android 11),開發版是Bliss OS 15 (Android 12)。Linux核心版本也用上5.15了。
內建Google Play商店,不用另外裝轉譯器也能玩64位元的3D遊戲,可以說是很大的進步了。
本文將討論在Linux上安裝Bliss OS 14的QEMU虛擬機,透過virglrenderer走虛擬機的GPU加速,使其能夠玩手遊。
1. 為何要選擇Bliss OS?
Bliss OS是基於Android-x86開發的Android系統,專門設計給電腦、平板跑Android用。在Android-x86的基礎上預載了許多實用工具,並保持活躍的開源更新模式。
比較一下便可知道,Android-x86官方網站最新的版本是Android 9.0,而Bliss OS最新測試版已來到Android 12。
Android版本舊看似不是大問題,但是在ARM轉譯上就有很大差距。Android-x86 9.0依賴Intel的「liboudini」技術,在x86架構的Android系統上執行ARM架構的APK,但只支援到32位元ARM-v7eabi的APK而已,現在有越來越多開發者只提供64位元ARM-v8a的APK哪。因此我們得改用Android 11以上的libhoudini,以相容64位元ARM架構的APK。
除了Android版本較新能相容更多電腦硬體外,Bliss OS也加入了一些讓Android變得像電腦的功能,例如強制旋轉、按鍵映射、遊戲模式、模擬觸控點擊、KernelSU(更難偵測到的root權限)等實用功能,還有用「Gearlock」取代傳統的Android recovery。
順帶一提,Bliss OS的開發團隊同時也有研發Waydroid,所以二者的功能有些類似。
2. 安裝虛擬機需要的軟硬體
我的系統規格:
- CPU:Intel i5-10210U
- GPU:Intel® UHD Graphics 620
- Android-x86版本:11.0
- QEMU版本:8.1.1
- virglrenderer版本:0.10.4
請確認CPU已經開啟虛擬化、KVM核心模組已經載入。
請在Linux系統安裝QEMU
、Libvirt
、Virt Manager
套件。Arch Linux參考這篇。Ubuntu參考這篇。
接著準備相容的顯示卡,virglrenderer是半虛擬化的GPU技術,可讓虛擬機在免GPU直通下獲得3D硬體加速。virglrenderer適用Intel與AMD顯示卡。
Nvidia的virglrenderer不是很穩定,且Nvidia在Android的驅動也有問題,GPU直通不可行。如果你是Nvidia顯示卡,建議放棄硬體加速。
3. 開始安裝Bliss OS系統,硬碟分割
Bliss OS官方網站目前提供Android 11 ~ Android 12的ISO。
為了執行64位元ARM應用程式,故使用Bliss OS 14 (Android 11),這個版本有內建libhoudini,新版ISO不知為何又砍掉了。
至官網下載ISO,選擇內建GApps的版本
開啟Virt Manager,新增虛擬機,選取ISO,系統選擇Android-x86
建議分配8GB RAM、4核心CPU。RAM越大越好,因ARM指令轉譯有時會佔用大量RAM。
至少分配64GB虛擬硬碟
勾選在安裝前自訂配置
晶片組類型選擇Q35,韌體選擇OVMF_CODE.fd
將硬碟設定為VirtIO
將CDROM改為SATA
將開機裝置全部勾選,並將CDROM放到最上面
將Spice監聽類型設為無,並勾選OpenGL,裝置選取Intel顯示卡
將顯示卡設定為VirtIO,並勾選3D加速
點選開始安裝系統
用鍵盤選取Bliss OS Installation
按Etner,選取
Create/Modify Partition
確認使用GPT分割表
用鍵盤操作:鍵盤左右鍵移動到
New
,按Enter,輸入+512M
,再輸入ef00
變更分區類型為EFI。分區名稱設為efi
,將第一個分區設為EFI分區。鍵盤移動到Free Space,按Enter,選取
New
,全部按Enter,分區名稱輸入android
,將第二個分區設為Linux系統分區。(可能因不對齊導致出現三個分區,不用理它)鍵盤移動到
Write
,按Enter寫入變更。隨後移動至Quit
退出。選取分割好的硬碟
vda2
將系統格式化為Ext4
安裝EFI/GRUB,並格式化
安裝後,點選Virt Manager的強制關機按鈕。從硬體列表移除CDROM
之後開機,選取第一個選項,預設便會載入virglrenderer的系統。
Bliss OS 14內建Google Play商店,可直接登入Google帳號。
ARM轉譯器預設已啟用,不用手動安裝。
4. Bliss OS使用技巧
Bliss OS預設啟用Boringdroid的桌面模式,系統下方會常駐一條工作列。
如果有APP需要全螢幕執行,可在系統設定 → Boringdroid → Set full screen app選取。
Bliss OS預裝「Set Orientation」APP可強制旋轉螢幕,不過這個太老了,我認為OHMAE Ryosuke的強旋轉螢幕更好用。
截圖請按下滑選單擷取。至於螢幕錄影,virglrenderer錄出來顏色怪怪的,建議用電腦OBS擷取虛擬機視窗。
原生Android多視窗支援度不是很好,如果硬要的話可以在開發人員選項啟用「自由形式視窗」。
Bliss OS內建KernelSU和Termux,Root權限並非全域啟用,需要對個別APP掛載。
虛擬機ADB連線我是參考Reddit文章用無線連接的。如果要在ADB Shell啟用Root權限:開啟KernelSU授予「com.android.shell」權限即可。
如何修改Bliss OS螢幕解析度:最簡單方法,裝SecondScreen再用KernelSU授予Root權限。或者修改Bliss OS開機的GRUB參數,輸入video=1280x720
。
5. 實際在Bliss OS玩遊戲
如果遊戲滑鼠點選沒反應,你可以在系統設定 → Blissify → Force Mouse Click as touch,強制將滑鼠點選轉譯成觸控點選。注意開啟此選項會導致滑鼠滾輪失效。
Bliss OS內建「遊戲模式」,在系統設定 → Blissify → Gaming Mode啟用。當使用者開啟遊戲APP的時候,便會自動停用通知,並出現懸浮按鈕方便截圖。
有些遊戲要用按鍵映射才能操作,你可以開啟KernelSU,授予XtMapper Root權限。接著開啟XtMapper,啟用服務,選取APP,設定按鍵綁定。
另外,QtScrcpy的按鍵映射也可以配合虛擬機使用。
為了測試Bliss OS轉譯器能耐,以下遊戲我全部用ARM-v8架構的APK測試。如果Google Play不給安裝,自行找APK。
《水果忍者》、《Temple Run 2》正常執行。
接著是《原神》,Waydroid可以跑,理論上Bliss OS應該也行才對…但virglrenderer不是很穩定,原神v4.1.0編譯著色器會崩潰。
另一款大型遊戲《幻塔》不用任何指令稿就能成功進入遊戲。