安卓模拟器和虚拟机不能同时运行

120
无论我何时运行Virtualbox,我都无法启动Android模拟器映像(反之亦然)。 AVD管理器中的错误消息为:
ioctl(KVM_CREATE_VM) failed: Device or resource busy
ko:failed to initialize KVM

我怎样才能让两者同时运行?

这是一台64位的Ubuntu电脑,所有涉及的软件都是最新版本。

14个回答

42

移除KVM内核模块(使用“sudo rmmod kvm_intel kvm”命令)可以让Virtualbox和Android模拟器同时运行,但这种设置下Android模拟器的性能极差。如果可能的话,最好关闭Virtualbox模拟器并通过运行“sudo /etc/init.d/vboxdrv stop”卸载其驱动程序(vboxdrv)。谷歌在其Android模拟器页面中建议在Linux下采用此“解决方案”。


11
我的后端需要在 VirtualBox(Vagrant)上运行以获取数据,所以这不是一个很好的选择:P - Richard de Wit
4
这个解决方案出现问题是因为我需要同时运行两者..我的HTTPD服务在虚拟机中,而我的应用程序在安卓中.. /我叹了口气。看来是时候再次启动开发服务器了。 - E Net Arch
1
另一个选择可能是使用Docker而不是VirtualBox与Android模拟器一起使用。 - Matt Welke
1
或者使用KVM运行Vagrant。 - Michael Hampton
感谢 @MichaelHampton。我安装了 vagrant-libvert 并且它正常工作! - jchook

33

我遇到了与VirtualBox冲突的问题。通过使用与“x86”不同的ABI(在我的情况下是armeabi-v7a),解决了这个问题。


4
很遗憾听到这个消息。 - MatBee
在我的情况下,我还需要运行VirtualBox虚拟机(用于RDP),所以这是一个非常好的建议。 - Csaba Toth
这个回答有点晦涩,你能详细解释一下吗? - rudolfbyker
2
@rudolfbyker,答案的意思是使用CPU/ABI x86/x86_64运行的模拟器速度更快,但使用与VirtualBox相同的KVM(基于内核的虚拟机)。创建另一种CPU(如arm64)的模拟器不会与VirtualBox冲突,但模拟器速度会慢得多。 - jayeffkay
你能解释一下,我们该如何实现它吗?谢谢。 - Mukundhan
显示剩余2条评论

19

我停止了在VirtualBox中运行的虚拟机,这使得错误消失。


1
这个方法在Fedora 20上对我有效。随着显示器变得更大,内存更多以及Gnome 3工作区的使用,很容易忘记你正在后台运行另一台机器。killall virtualbox就可以解决问题。 - Ray Foss
可行但不是最佳解决方案。你可以两者兼得(请参见Stanislav的答案)。 - MonoThreaded
我在使用Docker Machine和Virtual Box驱动程序时,在Ubuntu 16上遇到了这个问题。按照这个答案的建议,使用“docker-machine stop machine-name”停止虚拟机解决了这个问题。 - Benjamin Slabbert
事实证明,仅关闭VirtualBox GUI和VMs并不能解决问题。在我的情况下,我还有几个虚拟机进程在运行:VBoxSVC、VBoxNetDHCP、VBoxXPCCOMIPCD。在top/htop中杀死它们可以解决这个问题。 - Babken Vardanyan
1
问题是“我怎样才能让它们同时运行?” - Stephen M -on strike-
也适用于我。 - muhammad tayyab

6

我在Ubuntu 13.10上也遇到了同样的问题。

尝试删除kvm和kvm_intel内核模块。

  1. 停止所有模拟器。
  2. 运行命令:'sudo rmmod kvm_intel kvm'

没有这些内核模块,Virtualbox和Android模拟器可以同时工作。

顺便说一句,我不知道为什么会加载这些模块。


17
警告:虽然这种方法可以起作用,但是移除KVM内核模块会导致英特尔Android镜像的性能大幅下降,因为没有内核模块,你将失去CPU硬件加速支持。 - JustJohn
2
@Tajchert: 撤销操作:'sudo modprobe kvm_intel kvm' - Splitlocked
x86...模拟器拒绝在没有KVM模块的情况下运行。唉。 - Martlark
需要两个驱动程序。 - user1121055

5

终于有解决方法了。

按以下步骤处理 macOS

  1. 在 Android Studio 中进入 菜单栏 -> Android -> SDK Manager

  2. 确认已安装最新版本的 Intel Emulator Accelerator HAXM (v6.1.1)。Preferences panel in Android Studio

  3. 进入显示在首选项中的 Android SDK 位置的 extras 目录。在 MacOS 上,可以执行以下命令:

    open ~/Library/Android/sdk/extras

  4. 通过打开 IntelHAXM_6.1.1.dmg,然后打开挂载文件夹中的 IntelHAXM_6.1.1.mpkg 并遵循安装程序说明来安装 HAXM 包。

按以下步骤处理 Windows

  1. 在 Android Studio 中进入 菜单栏 -> Android -> SDK Manager

  2. 确认已安装最新版本的 Intel Emulator Accelerator HAXM (v6.1.1)。Preferences panel in Android Studio

  3. 进入首选项中显示的 Android SDK 位置的 extras 目录。例如:

    C:\Users\<username>\AppData\Local\Android\sdk\extras

  4. 在该目录中有一个名为 intelhaxm-android.exe 的文件。运行它。


4
有没有针对Ubuntu 16.04.3的修复程序? - sanders
HAXM不支持嵌套虚拟机! - Jorgesys
KVM怎么样?我该怎么做? - Vadim Kotov
这不是关于嵌套虚拟机的问题。这个主题中的问题是针对并排虚拟机的。而且这根本没有道理,这不应该起作用。 - Lothar
2
而对于Linux来说,目前还没有解决方案。这对于使用Linux来说又是一次坏运气。这意味着我现在必须选择Windows作为我的构建服务器。 - Lothar

4

我通过使用Genymotion代替标准的Android模拟器,最终解决了这个问题。除了不会出现这种冲突之外,它比普通模拟器快好几倍。


这是一个免费软件吗? - vishnu viswanath
@vishnu viswanath 仅限非商业用途。在此链接 https://www.genymotion.com/legal/terms-and-conditions/ 下方的“授予许可:有限”中了解更多信息。其中写道: 本许可证仅授予最终用户,并且仅与个人使用相关,最终用户是个人而不是专业人士,他下载应用程序以满足个人和私人需求,不包括商业和专业环境。 - mykolaj
1
这可能是因为Genymotion没有使用KVM而导致的。它既不稳定(因为在某些时候他们会开始使用它),也不具备高性能的解决方案。 - Hi-Angel
感谢您注释掉这个选项。我已经在Ubuntu 18.04上安装了Genymotion以供个人使用,现在我可以同时使用我的VirtualBox虚拟机 :) - Fer B.

4

您还可以在模拟器设置中将CPT/ABI设置从x86更改为arm。


2
但是模拟器会非常慢...但至少你可以同时运行两个 ;) - biophonc

3
对于在Linux上开发并卡在VirtualBox中运行多个后端系统的人来说,一个简单的解决方案就是创建一个VirtualBox X86 Android虚拟机,并通过PAT从本地主机隧道传输5555端口上的NAT接口。不需要慢速ARM AVD,也不需要libvirt/vagrant,更不用杀掉KVM!

enter image description here

然后让adb知道它。
$ adb tcpip 5555
restarting in TCP mode port: 5555
$ adb connect 127.0.0.1
connected to 127.0.0.1:5555
$ adb devices
List of devices attached adb server
* daemon started successfully
emulator-5554   device

在Android Studio中按下运行或调试按钮,将部署并在虚拟机上执行。您可以完全控制Android Studio调试器。

当运行adb devices时,设备显示为“离线”:( - Mohit Atray
在安卓虚拟机(VirtualBox内部)连接到“VirtWifi”解决了这个问题! - Mohit Atray
还可以考虑使用Android X86 VBox中的终端模拟器来编辑/ etc / hosts,甚至在VM上安装一个SSHD服务器(用户空间)应用程序。 - Alain Pannetier
迄今为止最佳选择 - Kanchu

3

另一种解决方案是使用vagrant-libvirt插件支持的libvirt后备vagrant。


2

虽然这只是一个解决方法,但绝对比禁用KVM更好,因为所有人都建议这样做。

可以在KVM中运行VirtualBox客户端。例如:kvm 这里只是运行 qemu-system-x86_64 -enable-kvm 的脚本)

kvm Win7.vdi -boot c -m 2G -vga qxl

这对我解决了问题,但是我无法弄清如何使我的虚拟镜像连接到互联网,而且键盘映射出现了问题。 - MikeSchem
@MikeSchem 是的,不幸的是,在KVM / QEMU中配置网络是一项大工程。在我撰写答案时,我没有时间启动和运行网络,因为经过一些操纵后,Windows Guest在KVM的启动过程中开始出现蓝屏死机,而在VB中仍然可以正常工作。 - Hi-Angel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接