Android模拟器和VirtualBox无法同时运行


104

每当我运行Virtualbox时,都无法启动Android模拟器映像(反之亦然)。AVD管理器中的错误消息是

ioctl(KVM_CREATE_VM) failed: Device or resource busy
ko:failed to initialize KVM

如何使两者同时运行?

那是Ubuntu 64位,所有涉及的软件都是最新发行的版本。

Answers:


40

删除kvm内核模块(使用'sudo rmmod kvm_intel kvm')可以同时运行Virtualbox和Android仿真器,但是在这种设置下Android仿真器的性能非常差。如果可能,最好通过运行'sudo /etc/init.d/vboxdrv stop'关闭Virtualbox仿真器并卸载其驱动程序(vboxdrv)。Google在其关于Linux的部分的Android模拟器页面上建议了这种“解决方案” 。


9
我的后端要求该应用程序具有在VirtualBox(Vagrant)上运行的数据,所以这不是一个好选择:P
Richard de Wit 2015年

4
这个解决方案#@%!是由于我需要同时运行两个..我的HTTPD服务在Virtual Box中,而我的应用程序在Android中../me叹息。猜猜,该重新启动Dev Server了。
E Net Arch

1
另一个选择是将Docker而不是VirtualBox与Android仿真器结合使用。
马特·韦尔克

1
或在KVM上运行Vagrant。
迈克尔·汉普顿

谢谢@MichaelHampton。我安装了vagrant-libvert,它起作用了!
jchook

30

我遇到了相同的VirtualBox冲突。通过使用不同于“ x86”的ABI(在我的情况下为armeabi-v7a)解决了该问题


这比关闭现有虚拟机要优雅得多。谢谢。
单线程

2
听到这个消息很伤心。
MatBee 2015年

大概仿真器将以这种方式缓慢运行,但这是一个选择。
ToolmakerSteve

就我而言,我还需要运行VirtualBox VM(对于RDP),因此这是一个非常好的建议。
卡萨巴·托斯

2
@rudolfbyker,答案是说,与CPU / ABI x86 / x86_64一起运行的仿真器要快得多,但是使用与VitualBox相同的KVM(基于内核的虚拟机)。创建与其他CPU的仿真器,像arm64,不会与VirtualBox的冲突,但模拟器是一个 很大较慢。
jayeffkay

16

我停止了使用VirtualBox运行的虚拟机。这使错误消失。


这在Fedora 20中为我工作。通过更大的显示屏,更多的RAM和Gnome 3工作区,很容易忘记您在后台某处运行另一台计算机。killall virtualbox应该这样做。
雷·福斯

有效,但不是最佳解决方案。您可以同时拥有它们(请参阅Stanislav的答案)
MonoThreaded

我在使用docker机器和虚拟盒驱动程序时遇到了Ubuntu 16的问题。停止虚拟机并docker-machine stop machine-name解决了此举动中所建议的问题
Benjamin Slabbert

事实证明,仅关闭VirtualBox GUI并不会解决问题。在我的情况下,我还有几个仍在运行的virtualbox进程:VBoxSVC,VBoxNetDHCP,VBoxXPCCOMIPCD。在top / htop中杀死它们解决了该问题。
巴本·瓦尔丹扬

问题是“如何使两者同时运行?”。
斯蒂芬M-罢工

5

我在Ubuntu 13.10上遇到了同样的问题。尝试删除kvm和kvm_intel内核模块。

去做这个:

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

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

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


16
一个警告:尽管这样做确实可行,但是删除KVM内核模块将导致Intel Android映像的性能大幅下降,因为如果没有内核模块,您将失去CPU的硬件加速支持。
JustJohn

1
@Tajchert:还原:“ sudo modprobe kvm_intel kvm”
拆分锁定

x86 ...仿真器拒绝在没有KVM模块的情况下运行。呸。
Martlark

需要两个驱动程序
user1121055 '18

5

终于有了解决方法。

对于macOS,请遵循以下步骤:

  1. 在Android Studio中,转到工具-> Android-> SDK管理器

  2. 确认您已安装最新版本的Intel Emulator Accelerator HAXM(v6.1.1)Android Studio中的“偏好设置”面板

  3. 转到extras首选项中显示的Android SDK位置的目录。在MacOS上,您可以执行以下操作:

    open ~/Library/Android/sdk/extras

  4. 通过打开IntelHAXM_6.1.1.dmg,然后在已安装的文件夹中打开IntelHAXM_6.1.1.mpkg,并按照安装程序的说明来安装HAXM包装。

对于Windows,请按照以下步骤操作:

  1. 在Android Studio中,转到工具-> Android-> SDK管理器

  2. 确认您已安装最新版本的Intel Emulator Accelerator HAXM(v6.1.1)Android Studio中的“偏好设置”面板

  3. 转到 extras首选项中显示的Android SDK位置目录。就像是:

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

  4. 在该目录中是某种文件,例如intelhaxm-android.exe。运行。


2
Ubuntu 16.04.3是否也有修复程序?
sanders

HAXM不支持嵌套虚拟机!
Jorgesys

那KVM呢?我该怎么做?
瓦迪姆·科托夫

这与嵌套虚拟机无关。本主题中的问题是并行的虚拟机。而且,这绝对不可行,这是绝对没有道理的
Lothar

并没有针对Linux的解决方案。Linux使用再次不幸。这意味着我现在必须选择Windows作为构建服务器。
Lothar

4

您还可以将CPT / ABI设置从x86更改为启用仿真器设置。


2
但是,模拟器将变得如此缓慢……但至少您可以同时运行两者;)
biophonc 2014年

4

我终于通过使用Genymotion而不是标准的Android模拟器使这个问题过时了。除了没有这种冲突之外,它比普通仿真器快几倍。


这是一个免费软件吗?
vishnu viswanath

@vishnu viswanath仅用于非商业用途的用例。在此处阅读更多有关genymotion.com/legal/terms-and-conditions的信息。其中说:该许可仅与个人使用有关,仅授予最终用户,最终用户是个人而不是专业人士,他们出于个人和私人需求下载应用程序,但不包括商业和专业环境。
mykolaj

1
由于genymotion不使用KVM,这可能消失了。既不稳定(因为他们将在某个时候开始使用它),也不是高效的解决方案。
Hi-Angel

感谢您注释掉此选项。我将在Ubuntu 18.04中安装Genymotion以供个人使用,现在我可以同时使用VirtualBox机器了:)
FerB。


2

虽然这也是一种解决方法,但绝对比每个人都建议禁用KVM更好。

只需在KVM中运行virtualbox guest虚拟机即可。例如kvm这只是运行的脚本qemu-system-x86_64 -enable-kvm

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

这为我解决了问题,但是我无法弄清楚如何使我的虚拟映像连接到互联网,并且由于某些原因,键盘映射已全部搞砸了
。– MikeSchem

@MikeSchem是的,很不幸,在KVM / QEMU中配置网络很重要。回到我写答案时,我还没有时间开始运行网络,因为经过一些操作,Windows guest在KVM中启动时开始出现BSOD,而在VB中仍在工作。
Hi-Angel


1

在某些情况下,我们需要保持VirtualBox机器正常运行,因此让所有VirtualBox机器保持运转,切换到物理移动设备以测试您的应用程序而不是模拟器。

如果您正在使用react-native或真正的android / ios设备,则可以使用expo。


0

由于OP同时请求VirtualBox + KVM,所以这可能不合时宜,但仍然可能是解决方法:我一直在寻找在Ubuntu 18.10 x64上启动Windows 7和AVD的方法。由于AVD的性能对我来说至关重要,因此不能选择关闭KVM。我已经通过Virtual Machine Manager(virt-manager软件包)安装了Windows 7,现在AVD和Windows 7都通过硬件加速。


0

这是使用vagrant和两个插件'libvirt'和'mutate' 解决此问题的方法:

  1. 打开终端并设置环境变量:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. 现在复制一个从上一个命令获得的代码,例如“ c1530713-aec2-4415-a6b5-b057928c7e5f”,并在以下代码中使用:

    流浪者软件包--base c1530713-aec2-4415-a6b5-b057928c7e5f-输出window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. 您需要安装一些流浪汉插件,例如libvirtmutate。Mutate会将.box转换为libvirt VM:

    流浪汉插件安装vagrant-libvirt流浪汉插件安装vagrant-mutate

  4. 将无业游民的盒子转换为libvirt:

    vagrant mutate window7_.box libvirt

  5. 现在您可以初始化无用的VM。如果仍然存在任何错误,请继续编辑您的Vagrant文​​件。像我一样,我取消注释该行以config.vm.network开头, 然后运行以下命令:

    vagrant up --provider=libvirt

这就是我能够完全摆脱此错误的方式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.