要在Linux系統跑Android APP,Ivon在 Linux的Android模擬器一文提過多種方案。本篇文章Ivon要介紹Android-x86分支「Bliss OS」。
Bliss OS算是Android-x86的改進版,可以安裝在實體機和虛擬機,支援許多新硬體,例如Intel 10代處理器以後的GPU。Android版本也更新的比較快。
內建Google Play商店,不用另外裝轉譯器也能玩64位元的3D遊戲,可以說是很大的進步了。
本文將討論在Linux安裝Bliss OS的QEMU/KVM虛擬機,透過virglrenderer走虛擬機的GPU加速,使其能夠玩手遊。
影片版安裝過程參考:
1. 為何要選擇Bliss OS?#
相關文章: Android-x86優質替代品 - Bliss OS介紹
Bliss OS是基於Android-x86開發的Android系統,專門設計給x86架構的電腦、平板跑Android用。在Android-x86的基礎上預載了許多實用工具,並保持活躍的開源更新模式。
比較一下便可知道,Android-x86官方網站最新的版本是Android 9.0,而Bliss OS最新測試版已來到Android 13。
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
套件。Ubuntu參考
這篇安裝。Arch Linux參考
這篇安裝。
接著準備相容的顯示卡, virglrenderer是半虛擬化的GPU技術,可讓QEMU/KVM虛擬機在免GPU直通下獲得3D硬體加速。
virglrenderer僅適用Intel與AMD顯示卡;Nvidia閉源驅動的virglrenderer不是很穩定,且Nvidia在Android的驅動也有問題,GPU直通不可行。
如果你是Nvidia顯示卡,建議放棄硬體加速,使用Bliss OS的No HW Acceleration模式開機。
3. 開始安裝Bliss OS系統,硬碟分割#
Bliss OS官方網站提供各種版本的ISO,安裝方式大同小異。
Bliss OS 14(Android 11)和Bliss OS 15(Android 12L)使用Intel libhoudini轉譯ARM架構的APK,在那之後的版本則是改用Google libndk。
這裡使用Bliss OS 15做示範。
至 官網下載ISO,選擇內建GApps的版本 (Bliss OS 15.9.x (x86_64-v2) with GApps)
開啟Virt Manager,新增虛擬機,選取ISO,系統選擇Android-x86
建議分配8GB RAM、4核心CPU。RAM越大越好,因ARM指令轉譯有時會佔用大量RAM。
至少分配64GB虛擬硬碟
勾選在安裝前自訂配置
晶片組類型選擇Q35,韌體選擇UEFI (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加速的系統。如果你要測試沒有硬體加速的選項,請將QEMU顯示卡改成QXL,並在開機的時候選取VM Options → VBox/VMWare - No HW Acceleration開機。
Bliss OS內建Google Play商店,不用認證裝置,可直接登入Google帳號。
ARM轉譯器預設已啟用,不用手動安裝。
4. 如何修改Bliss OS螢幕解析度#
在開機選單點選VM Options → Debug QEMU/KVM VirGL,進入Android shell
使用
blikid
指令查看EFI硬碟分區,通常是/dev/sda1
掛載EFI分區
mount /dev/sda1 /mnt
- 編輯
android.cfg
cd /mnt/efi/boot
vi android.cfg
首先找到
linux $kd/kernel
這行,在最後面加入video=1920*1080
。接著找到set gfxmode=
這行,修改解析度。重開機
umount /dev/sda1
reboot -f
另一種修改解析度的方法為安裝 SecondScreen再強制調整。
如果改解析度後滑鼠無法同步,那麼得準備第二隻滑鼠,再用Virt Manager的USB重新導向功能直通進去。
Virt Manager的視窗似乎無法反應Bliss OS虛擬機解析度的變化,導致畫面看起來依然糊糊的。
5. Bliss OS使用技巧#
Bliss OS預設啟用Boringdroid的桌面模式,系統下方會常駐一條工作列。
如果有APP需要全螢幕執行,可在系統設定 → Boringdroid → Set full screen app選取。
Bliss OS預裝「Set Orientation」APP可強制旋轉螢幕,不過這個太老了,我認為 OHMAE Ryosuke的強制旋轉螢幕更好用。
截圖請按下滑選單擷取。至於螢幕錄影,virglrenderer錄出來顏色怪怪的,建議用電腦 OBS Studio擷取虛擬機視窗。
原生Android多視窗支援度不是很好,如果硬要的話可以在開發人員選項啟用「自由形式視窗」。
Bliss OS內建KernelSU和 Termux,Root權限並非全域啟用,需要對個別APP掛載。
虛擬機ADB連線我是參考 Reddit文章用無線連接的。如果要在ADB Shell啟用Root權限:開啟KernelSU授予「com.android.shell」權限即可。
6. 實際在Bliss OS玩遊戲#
安裝遊戲建議使用原生支援x86架構的版本,Google Play應該會自動幫你過濾。若安裝ARM架構的APK會導致系統要花額外資源進行轉譯。
遊戲如果不偵測模擬器應該都開得起來,但部份遊戲播放影片會有問題,應該是virglrenderer的bug。試試在開機選單,使用Debugging選單下的hwcomposer.drm
方式開機。
如果遊戲滑鼠點選沒反應,你可以在系統設定 → 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編譯著色器會崩潰。
另一款大型遊戲《幻塔》不用任何指令稿就能成功進入遊戲。