当前位置: 首页 > news >正文

Linux上使用QEMU安装Android-x86虚拟机(转)

本文转载自 https://ivonblog.com/posts/android-x86-virgl-libhoudini/

要在Linux電腦執行Android APP,並要轉譯ARM、支援GPU加速,我在Linux的Android模擬器有過討論。

本文要介紹設定Android-x86虛擬機的作法。

image

若設定的當的話,效能會比Google官方的Android模擬器要好。虛擬機軟體當然是挑靈活性高的QEMU/KVM用,那首先要解決二個問題。

一是3D效能。QEMU預設的QXL顯示卡只有讓3D應用程式勉強能跑起來的程度,要使用VirGL(virtual OpenGL renderer)或直通顯示卡,虛擬機的3D效能才會獲得大幅改進,如下圖FPS對比。

image

因為直通顯示卡過於麻煩,本文採用VirGL,而VirGL需要QEMU本身支援。

二是轉譯ARM應用程式的問題。Android-x86的ARM轉譯器"libhoudini"要自行下載,但這不是什麼難事。

接下來,讓我們看看如何在Linux安裝Android-x86虛擬機,再達成GPU硬體加速和ARM轉譯。

1. 系統資訊

因為Nvidia顯示卡520.56.06版的專有驅動不支援VirGL,所以我是用電腦的內顯測試。

    作業系統:GNU/LinuxCPU:Intel i5-7400GPU:Intel® UHD Graphics 630Android-x86版本:9.0-r2QEMU版本:7.1.0virglrender版本:0.10.1

2.需要的軟體

這些軟體都能夠透過套件管理員安裝,Ubuntu請看這裡,Arch Linux看這邊,Gentoo看這邊。

安裝下面軟體

  1. QEMU
  2. Llibvirt
  3. 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指令開機。

  1. 至Android-x86官網下載64位元,Android 9.0-r2的ISO。

image
2. 開啟Virt Manager,點選編輯偏好設定,勾選啟用XML編輯
image

  1. 點選左上角新增虛擬機,點選手動安裝
    image

  2. 安裝系統選Android-x86 9.0
    image

  3. 記憶體至少給4GB、CPU至少雙核心。
    image

  4. 建立64GB的虛擬硬碟。QCOW2硬碟檔案不會一次佔用64GB,而是慢慢吃滿。
    image

  5. 勾選在安裝前自訂配置
    image

  6. 點選左邊的系統概覽,晶片組選Q35,韌體選UEFI x64 OVMF_CODE
    image

differencesbenefits_between_i440fx_and_q35

  1. 點選左邊的IDE磁碟,切換成SATA
    image

  2. 點選左邊的顯示協議,將監聽類型設定為無,勾選OpenGL,選擇Intel的顯示卡
    image

  3. 點選左邊的顯示卡,選擇Virtio,並勾選3D加速。這裡的3D加速是使用VirGL達成的,參見Linux透過virtio-gpu virglrenderer給QEMU/KVM虛擬機3D加速。

image

  1. 點選左下角新增硬體,加入CDROM,按選擇自訂儲存,選取Android-x86的ISO
    image

  2. 點選左邊的開機選項,設定開機順序為CDROM優先

安裝Android系統

  1. 點選左上角開始安裝,開機進入Android後用鍵盤上下鍵移動到Installation後按Enter。
    image

  2. 選取Create/Modify partitions,按Enter
    image

  3. 選取Yes使用GPT

image

  1. 這個步驟要分割硬碟,首先建立EFI分區。用鍵盤左右鍵移動到[New],按Enter。
    image

  2. 首先第一個選項First Sector按下Enter,接著 Size輸入 +512M
    image

  3. 輸入ef00將分區類型設為EFI,並輸入EFI作為分區名稱。
    image

  4. 接著鍵盤上下鍵移動到最下面的選項,選取[New],接著3次Enter。
    image

  5. 給該分區取名為Android
    image

  6. 確認分區表無誤之後,左右鍵移動到[Write]寫入變更,輸入yes,然後移動到[Quit]退出。
    image

  7. 選取vda2

image

  1. 選取格式化成Ext4,之後選取Yes。提示:如果硬碟已裝有舊版本Android-x86,未來可直接安裝新版本Android-x86進行更新,不用重新格式化。
    image

  2. 選取Yes安裝EFI GRUB
    image

  3. 將EFI分區格式化
    image

  4. 選取Yes,避免將system分區設為唯讀
    image

  5. 安裝好按Virt Manager上方的強制關機,再按燈泡圖示,到硬體選單移除CDROM。
    image

  6. 將虛擬機重開機,開始設定Android系統。設定時要連線到VirtWifi這個虛擬Wifi。
    image

  7. 進入桌面後開啟Android-x86的「模擬終端」APP,輸入su,取得root權限:
    image

  8. 接著輸入dmesg | grep virgl,應該會看到VirGL已經載入的訊息,代表GPU加速正常。
    image

到這邊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版,那就無法安裝。

  1. 開啟虛擬機的瀏覽器,從Android-x86官網自行下載Android 9.0的libhoudini。

https://github.com/isGt93/git2020

  1. 開啟Android-x86的模擬終端,切換成su
su
  1. 將libhoudini移動到系統目錄並重新命名
mkdir /data/arm
cp /sdcard/Download/houdini.sfs /data/arm/houdini9_y.sfs
  1. 啟用Native Bridge,忽視跳出的錯誤訊息,重新開機。
enable_nativebridge

這裡的enable_nativebridge其實是shell腳本, 可以通過whereis which找到對應的文件。
可以發現如果開啟成功,那麼logcat打印的日誌裡面會有 houdini enabled

至此,你應該能在Google Play下載原本顯示「不相容」的ARM架構應用程式了,比方說Smash Hit。如果還是不行,就再勾選一次原生相容模式。

image

5.Android-x86其他使用技巧

5.1. 遊戲鍵盤映射

遊戲滑鼠點了沒反應?有玩動作遊戲的需求?你可以安装QtScrcpy解决。

或者可以使用 scrcpy

  1. Linux直接下載解壓縮,對QtScrcpy點二下。在右下角ADB連線的位址填寫虛擬機的IP,點選無線連接。虛擬機IP可從Virt Manager編輯硬體→網路卡查看。
    image

  2. 在左邊列表對虛擬機名稱按二下,接著就會顯示虛擬機的桌面。
    image

  3. QtScrcpy可以撰寫自訂指令稿來映射按鍵,例如將和平精英的範本稍作修改,便可以用鍵盤玩其他FPS遊戲,下圖為Wings of Steel:
    image

5.2 Android-x86多開虛擬機

模擬器「多開」即為同時執行多個虛擬機,以便同時執行二個以上遊戲,或是一個遊戲同時開二個帳號。

以Virt Manager來說,要多開的話就是複製多個虛擬機,再重複利用就好了。

  1. 將虛擬機關機。在Virt Manager管理界面,點選Android-x86,右鍵複製虛擬機。
    image
  2. 如此會複製出第二個虛擬機。此虛擬機會繼承剛剛安裝的一切東西,只要取不同名字就可以了,因此便可開一個虛擬機再啟動另一個。
    image
    注意多開需要考慮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

參考資料

  • QEMU - Gentoo Wiki
  • QEMU - Build instructions
  • On Qemu, some apps ignore my input (9.0-r2) - Google Groups
  • How to Run Android in QEMU to Play 3D Android Games on Linux - Linux Hint
  • How to install libhoudini on a custom Android x86 rig - stackoverlow
  • 如何在虚拟机中运行知乎App - 知乎专栏

其他連接

https://ivonblog.com/posts/android-x86-virgl-libhoudini/
https://stackoverflow.com/questions/49634762/how-to-install-libhoudini-on-a-custom-android-x86-rig
https://github.com/isGt93/git2020
https://ivonblog.com/posts/linux-qemu-virglrenderer/

http://www.zskr.cn/news/1437422.html

相关文章:

  • JAVA:字符串反转
  • 高并发系统设计:应对海量请求的技术实践
  • Gemini推送通知优化终极手册(2024Q2最新API v1.5实测数据+AB测试报告)
  • 纯视觉无感全域赋能 跨镜无缝接力重塑精细化安防能力技术解析方案
  • 递归函数的空间复杂度实例剖析
  • 2026年熊猫烟花性价比排名,靠谱的燃放公司推荐 - mypinpai
  • 数智空间动态重构 跨镜连续追踪筑牢各行业安全底座技术解析方案
  • 为什么你的Gemini引导转化率低于行业均值38%?——基于17家头部AI产品引导链路的逆向工程分析
  • Java程序设计(第3版)第四章——错误:空指针异常
  • 2026年5月新发布:湖南地区寻求专业营销策划团队的可靠选择指南 - 2026年企业资讯
  • 收藏!C语言入门基础知识大全2
  • 云原生架构深度解析与 Python 容器编排管理器核心实现
  • Gemini服务升级全链路影响评估,含LangChain/LLamaIndex/LangGraph兼容性矩阵(限时开放下载)
  • 2026年河南压力罐品牌排行榜,靠谱厂商大盘点 - mypinpai
  • Gemini Prompt注入+数据残留双通道泄露路径揭秘(附可落地的审计Checklist v3.2)
  • 2026年工业用油经销商哪家好?江苏品高值得选 - mypinpai
  • 西南螺丝厂家技术解析:成都膨胀螺栓厂家/成都螺丝批发/成都螺母厂家/成都非标紧固件/成都高强度螺栓/四川紧固件厂家/选择指南 - 优质品牌商家
  • 2026年成都物业日常保洁公司选型技术全解析:成都物业管理公司哪家好/成都物业管理公司推荐/成都酒店保洁/成都保洁公司哪家好/选择指南 - 优质品牌商家
  • Gemini年报生成效率提升73%:基于200+金融/科技企业实测的5步标准化流程
  • 自由度汽车操纵Simulink模型(侧向、侧倾、横摆-带数据参数与详细公式文档)
  • 智慧教育平台电子课本智能获取工具:让数字教育资源触手可及
  • 2026卧式离心泵技术分享:管道泵/冷却水泵/凸轮泵/凸轮转子泵/剩余污泥泵/化工泵/单级离心泵/卧式离心泵/卸车泵/选择指南 - 优质品牌商家
  • 权威认证・2026 年跨境知识产权服务标杆名录 —— 基于全球布局能力与实战成效的专项遴选 - 广东科技观察
  • 如何用Parsec VDD创建完美虚拟显示器:从入门到精通的完整指南
  • 2026年现阶段南京拒赔纠纷律师谁强?专业力量深度解析 - 2026年企业资讯
  • 你管理 AI 工具配置的方式,可能一直是错的
  • [智能体-200]:编排的本质是:任务拆解、资源分配、时序调度、流程管控,再通过协同执行达成最终结果。这个过程中,哪些是大模型完成,哪些是编排客户端完成,哪些是工具完成?
  • 突破极限:yuzu模拟器帧率优化终极指南
  • 北京离婚财产分割纠纷难解决?2026年5位资深律师推荐 - 本地品牌推荐
  • 说说2026年消防排烟设备制造厂,哪家靠谱 - myqiye