Using AVD of Android Studio on Linux as a Android gaming emulator.
分享如何在Ubuntu Linux系統用Android Studio的AVD模擬器玩遊戲,並設定只啟動AVD模擬器,而不要一併開啟笨重IDE的方法。
Android Studio是Google推出的IDE,支援Linux、Windows、macOS系統,用於開發Android APP之用。授權屬於專有軟體。
最大的特點是內建各版本的Android模擬器(Android Virtual Devices,下面簡稱AVD),這個模擬器能不能玩遊戲呢?理論上是可以的。Android Studio的模擬器能夠模擬手機型號、內建GAPPS、支援GPU加速、內建ARM轉譯器libndk、動態縮放視窗大小。
範例:使用AVD模擬器在Linux遊玩Google Play的賽馬娘遊戲
那麼為什麼要用到Android Studio的AVD呢?Ivon分享過Linux的Android模擬器一覽,在這之中,Android Studio的AVD可能是除了Genymotion以外,唯一能在Linux上正常使用Nvidia GPU玩Android手遊的模擬器了。由於是Google官方推出的,必定是經過許多測試才放出來給大家使用的。
本來,Waydroid應該是更好的方案的,完全由開源社群維護,Waydroid(LXC容器)比AVD模擬器(QEMU/KVM虛擬機)效能要好。AVD模擬器總是卡卡的。
我實際用Geekbench跑分測試,同一個Intel i5-10210U CPU,分配同核心數的情況下,Waydroid(上)性能確實比AVD模擬器(下)要好,Waydroid幾乎是以原生的速度執行Android APP。
但Waydroid死穴是只支援Intel和AMD GPU。開發者說他們不支援Nvidia的原因,乃是因為Nvidia沒有提供開源的Android端驅動,Linux端Mesa驅動也有問題。而Google用了某種轉譯OpenGL ES的魔法,讓Nvidia驅動跑起來。
在AVD模擬器裡面可以看到成功顯示Linux宿主機的Nvidia GPU。AVD模擬器不論是Intel、AMD、Nvidia都可以將其轉譯成OpenGL ES。
因此對Nvidia用戶來說,AVD是唯一可行的,有GPU加速的Android模擬器方案。
1. 確認虛擬化與圖形驅動#
- Android Studio會使用QEMU/KVM加速模擬器,因此要先確認Ubuntu電腦有無開啟虛擬化。確認CPU是否支援虛擬化,回傳值不應為0:
sudo grep -E -c '(vmx|svm)' /proc/cpuinfo
- 確認KVM核心模組是否有載入:
sudo lsmod | grep kvm
- 如果使用Nvidia顯示卡,要記得安裝Nvidia閉源驅動。
2. 安裝Android Studio#
Android Studio僅支援x86_64架構的Linux電腦。建議磁碟空間64GB以上,RAM 8GB以上,CPU 4核心以上C。
到官網下載,不要用Flatpak方式安裝。
將tar檔解壓縮,放到任意目錄。我個人是放在
~/Applications
點二下
android-studio/bin/studio
啟動Android Studio,等待初始化套件完成。按New Project 隨便新增一個專案
按左上角Tools → Create Desktop Entry可以建立Linux桌面圖示
3. 新增AVD模擬器#
點左上角 → Tools → Device Manager
畫面左邊應該會出現下載好的模擬器,撰文當下是Android 16的映像檔
如果需要其他版本,點選+號,Create New Virtual Device新增,例如我選Pixel 9 Pro XL,設定Android 16版本,選取內建Google Play的映像檔。(註:這支是挖孔螢幕,AVD模擬器會一併模擬挖孔螢幕,如果要完整螢幕請選舊機型。)
按Additional Settings調整模擬器性能。分配至少64GB儲存空間,還有至少4GB RAM和4個CPU核心。不過,內含Google Play的映像檔沒辦法使用全速,所以我們得手動修改設定檔。
下載之後,點Show on disk,編輯設定檔
config.ini
修改以下內容(沒有的話自行新增)
disk.dataPartition.size=64G # 模擬器虛擬磁碟容量
hw.audioInput=yes # 音效輸入
hw.audioOutput=yes # 音效輸出
hw.cpu.ncore=4 # 模擬器核心數,依照電腦性能調整
hw.ramSize=6144 # 模擬器RAM
PlayStore.enabled=true # 強制開啟Google Play
tag.display=Google Play
tag.id=google_apis_playstore
# 不想要模擬器顯示手機邊框的將以下三行刪除
skin.name=
skin.path=
- 然後開機,登入Google帳號,完成初始化,然後關機。
4. 單獨啟動AVD模擬器,不啟動IDE#
Android Studio的問題就是太笨重了,執行IDE的時候非常吃資源。我們可以單獨執行AVD,而不用開啟IDE。
Android Studio的依賴套件會放到
~/Android/
列出模擬器列表,譬如
Pixel_9_Pro_XL
~/Android/Sdk/emulator/emulator -list-avds
- 只要啟動AVD而不要開啟IDE的話,用這個指令啟動:
~/Android/Sdk/emulator/emulator -avd "模擬器機型"
如果你有兩個GPU,可以用Nvidia PRIME的方式指定使用Nvidia GPU用於模擬器的圖形加速。
- 我們把它做成一個Linux桌面捷徑,加到Linux應用程式列表
vim ~/.local/share/applications/emulator_pixel_9_pro_xl.desktop
- 填入以下指令。如果AVD在Wayland下怪怪的,在Eexc=後面加一個環境變數
env WAYLAND_DISPLAY=
,改成以XWayland啟動。
[Desktop Entry]
Categories=Development;IDE;
Exec="/home/user/Android/Sdk/emulator/emulator" -avd "Pixel_9_Pro_XL"
Icon=/home/user/Android/Sdk/skins/pixel_9_pro_xl/back.png
Name=Pixel 9 Pro Emulator
NoDisplay=false
Type=Application
這樣之後就可以點Linux桌面的捷徑這個啟動AVD模擬器了。
點選AVD模擬器右上角的三個點開啟設定,點選Show window frame around device,就會顯示邊框,能夠縮放AVD模擬器視窗。
5. 搭配QtScrcpy使用按鍵映射#
改用Scrcpy作為主要連線手段。QTScrcpy支援按鍵映射,以鍵盤控制觸控點擊。
我們可以在AVD模擬器啟動指令加上-no-window -gpu host
參數,這樣模擬器就不會跳出視窗,並且維持GPU加速。
~/Android/Sdk/emulator/emulator -avd "模擬器機型" -no-window -gpu host
然後用ADB列出目前電腦上的裝置
點選連線
6. 多開APP#
我們沒有必要同時執行多個AVD,太吃資源了。
利用Android 15的虛擬雙螢幕功能就可以了。
按一下AVD模擬器的設定 → Display,新增一塊螢幕。
多出來的螢幕就能用來執行其他APP。不過跑大型遊戲還要考慮到模擬器分配的RAM是否足夠。副螢幕似乎不會跟著旋轉方向。
7. 如果APP閃退#
AVD內建libndk,可能會因為ARM轉譯有問題閃退。
盡量找x86_64架構的APK,減少因為ARM轉譯器崩潰的機會。
也可能是遊戲偵測到模擬器閃退。AVD就只是個開發用模擬器,如果遊戲偵測到疑似模擬器不給玩,那也沒啥辦法~
Play Integrity API需要硬體支援,不可能在模擬器裡面通過。