註解:Android-x86版本有點太老了,建議您可以試試改進版的 BlissOS。
要在Linux電腦執行Android APP,並要轉譯ARM、支援GPU加速,我在 Linux的Android模擬器有過討論。
本文要介紹設定Android-x86虛擬機的作法。
若設定的當的話,效能會比Google官方的Android模擬器要好。虛擬機軟體當然是挑靈活性高的QEMU/KVM用,那首先要解決二個問題。
一是3D效能。QEMU預設的QXL顯示卡只有讓3D應用程式勉強能跑起來的程度,要使用VirGL(virtual OpenGL renderer)或直通顯示卡,虛擬機的3D效能才會獲得大幅改進,如下圖FPS對比。
因為直通顯示卡過於麻煩,本文採用VirGL,而VirGL需要QEMU本身支援。
二是轉譯ARM應用程式的問題。Android-x86的ARM轉譯器"libhoudini"要自行下載,但這不是什麼難事。
接下來,讓我們看看如何在Linux安裝Android-x86虛擬機,再達成GPU硬體加速和ARM轉譯。
1. 系統資訊#
因為Nvidia顯示卡520.56.06版的專有驅動不支援VirGL,所以我是用電腦的內顯測試。
- 作業系統:GNU/Linux
- CPU:Intel i5-7400
- GPU:Intel® UHD Graphics 630
- Android-x86版本:9.0-r2
- QEMU版本:7.1.0
- virglrender版本:0.10.1
2. 需要的軟體#
這些軟體都能夠透過套件管理員安裝,Ubuntu請看 這裡,Arch Linux看 這邊,Gentoo看 這邊。
- QEMU
- Llibvirt
- Virt Manager
確認CPU已經啟用虛擬化,用指令grep --color vmx /proc/cpuinfo
查看。
確認已啟用KVM核心模組,用指令lsmod | grep kvm
查看。
在Android-x86的選擇上,本文採用的是穩定的Android-x86 9.0,僅支援32位元ARM APP。不過市面上還有開發較快的 BlissOS,目前最新版Android 11.0,已支援64位元ARM APP。
3. 開始安裝Android-x86虛擬機#
P.S. 如果不想用圖形界面安裝,或是啟用VirGL後開機有問題,請跳到 5.3. Android-x86多開虛擬機了解如何用QEMU指令開機。
至 Android-x86官網下載64位元,Android 9.0-r2的ISO。
開啟Virt Manager,點選
編輯
→偏好設定
,勾選啟用XML編輯
:點選左上角新增虛擬機,點選
手動安裝
。安裝系統選
Android-x86 9.0
:記憶體至少給4GB、CPU至少雙核心。
建立64GB的虛擬硬碟。QCOW2硬碟檔案不會一次佔用64GB,而是慢慢吃滿。
勾選
在安裝前自訂配置
點選左邊的
系統概覽
,晶片組選Q35
,韌體選UEFI x64 OVMF_CODE
。點選左邊的IDE磁碟,切換成SATA
點選左邊的
顯示協議
,將監聽類型
設定為無,勾選OpenGL
,選擇Intel的顯示卡點選左邊的
顯示卡
,選擇Virtio
,並勾選3D加速
。點選左下角
新增硬體
,加入CDROM
,按選擇自訂儲存
,選取Android-x86的ISO點選左邊的
開機選項
,設定開機順序為CDROM優先點選左上角
開始安裝
,開機進入Android後用鍵盤上下鍵移動到Installation
後按Enter。選取
Create/Modify partitions
,按Enter選取
Yes
使用GPT這個步驟要分割硬碟,首先建立EFI分區。用鍵盤左右鍵移動到[New],按Enter。
First Sector按Enter,Size輸入
+512M
輸入
ef00
將分區類型設為EFI,並輸入EFI
作為分區名稱。接著鍵盤上下鍵移動到最下面的選項,選取[New],接著3次Enter。
給該分區取名為
Android
確認分區表無誤之後,左右鍵移動到[Write]寫入變更,輸入
yes
,然後移動到[Quit]退出。選取
vda2
選取格式化成
Ext4
,之後選取Yes
。提示:如果硬碟已裝有舊版本Android-x86,未來可直接安裝新版本Android-x86進行更新,不用重新格式化。選取
Yes
安裝EFI GRUB將EFI分區格式化
選取
Yes
,避免將system分區設為唯讀安裝好按Virt Manager上方的
強制關機
,再按燈泡圖示,到硬體選單移除CDROM。將虛擬機重開機,開始設定Android系統。設定時要連線到VirtWifi這個虛擬Wifi。
進入桌面後開啟Android-x86的「模擬終端」APP,輸入
su
,取得root權限:接著輸入
dmesg | grep virgl
,應該會看到VirGL已經載入的訊息,代表GPU加速正常。
到這邊Android-x86安裝完成,不過還只能執行x86架構的應用程式而已,請接著看如何安裝ARM轉譯器。
4. 安裝ARM轉譯器libhoudini#
Android-x86安裝APP盡量找x86_64或者universal的APK,這樣比較穩定,例如在 ApkMirror下載APK的時候可得知該APP的架構。Google Play在下載APP的時候,也會自動判定支援Android-x86系統的APP。
但是很多APP只有ARM版的,那麼就得安裝libhoudini轉譯器。libhoudini是Intel研發的閉源ARM轉譯技術,Android 9的libhoudini可以在x86_64系統執行含有ARM架構(armv7)函式庫的APK,但是不支援只有ARM64(armv8a)架構的APK。 換句話說,如果該APP只有64位元ARM版,那就無法安裝。
開啟Android系統設定 → Android-x86設定 → 勾選原生相容模式。
照理說系統應該會自動安裝libhoudini才對,可是這個版本會下載失敗。所以開啟虛擬機的瀏覽器,從Android-x86官網自行下載 Android 9.0的libhoudini。
開啟Android-x86的模擬終端,切換成su
su
- 將libhoudini移動到系統目錄並重新命名
mkdir /data/arm
cp /sdcard/Download/houdini.sfs /data/arm/houdini9_y.sfs
- 啟用Native Bridge,忽視跳出的錯誤訊息,重新開機。
enable_nativebridge
至此,你應該能在Google Play下載原本顯示「不相容」的ARM架構應用程式了,比方說 Smash Hit。如果還是不行,就再勾選一次原生相容模式。
5. Android-x86其他使用技巧#
5.1. 遊戲鍵盤映射#
遊戲滑鼠點了沒反應?有玩動作遊戲的需求?你可以安装 QtScrcpy解决。
Linux直接下載解壓縮,對QtScrcpy點二下。在右下角ADB連線的位址填寫
虛擬機的IP
,點選無線連接。虛擬機IP可從Virt Manager編輯硬體→網路卡查看。在左邊列表對虛擬機名稱按二下,接著就會顯示虛擬機的桌面。
QtScrcpy可以撰寫自訂指令稿來映射按鍵,例如將 和平精英的範本稍作修改,便可以用鍵盤玩其他FPS遊戲,下圖為Wings of Steel:
5.2. Android-x86多開虛擬機#
模擬器「多開」即為同時執行多個虛擬機,以便同時執行二個以上遊戲,或是一個遊戲同時開二個帳號。
以Virt Manager來說,要多開的話就是複製多個虛擬機,再重複利用就好了。
將虛擬機關機。在Virt Manager管理界面,點選
Android-x86
,右鍵複製虛擬機。如此會複製出第二個虛擬機。此虛擬機會繼承剛剛安裝的一切東西,只要取不同名字就可以了,因此便可開一個虛擬機再啟動另一個。
注意多開需要考慮CPU和遊戲所需性能,建議每個虛擬機至少要給2核CPU和4GB RAM,調低虛擬機螢幕解析度也會有幫助。
5.3. 用QEMU指令開機#
不需要使用Virt Manager,也可以直接使用QEMU指令開機安裝。
對於想使用QEMU命令行的用戶,參照 BlissOS的指用以下腳本啟動Android-x86 (需要sudo):
#!/bin/bash
~/qemu-7.1.0/build/qemu-system-x86_64 \
-enable-kvm \
-M q35 \
-m 4096 -smp 4 -cpu host \
-drive file=/var/lib/libvirt/images/android-x86-9.0.qcow2,if=virtio \
-usb \
-device virtio-tablet \
-device virtio-keyboard \
-device qemu-xhci,id=xhci \
-machine vmport=off \
-device virtio-vga-gl -display gtk,gl=es \
-net nic,model=virtio-net-pci -net user,hostfwd=tcp::4444-:5555
總結#
此方法因為是完整系統,對應用程式的支援度較佳。此外Android-x86尚有 Bliss OS這類第三方版本,他們有新增大量輔助工具,Android版本也更新。