Android-Emulator und Virtualbox können nicht gleichzeitig ausgeführt werden

103

Immer wenn Virtualbox ausgeführt wird, kann ich kein Android-Emulator-Image starten (und umgekehrt). Die Fehlermeldung im AVD-Manager lautet

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

Wie kann ich beide gleichzeitig ausführen?

Das ist ein Ubuntu 64 Bit, alle beteiligten Software ist von der neuesten veröffentlichten Version.

Bananeweizen
quelle

Antworten:

40

Durch das Entfernen der kvm-Kernelmodule (mit 'sudo rmmod kvm_intel kvm') können die Virtualbox und der Android-Emulator gleichzeitig ausgeführt werden, aber die Leistung des Android-Emulators in einem solchen Setup ist äußerst schlecht. Wenn möglich, ist es besser, den Virtualbox-Emulator herunterzufahren und seinen Treiber (vboxdrv) zu entladen, indem Sie 'sudo /etc/init.d/vboxdrv stop' ausführen. Google schlägt diese "Lösung" auf seiner Android Emulator-Seite im Abschnitt über Linux vor.

Traber
quelle
9
Mein Backend war erforderlich, damit die App Daten auf VirtualBox (Vagrant) laufen lässt. Das ist also keine gute Option: P
Richard de Wit
4
Diese Lösung # @%! Ist auf die Tatsache zurückzuführen, dass ich beide gleichzeitig ausführen muss. Mein HTTPD-Dienst befindet sich in Virtual Box, während sich meine App in Android befindet. / Ich seufze. Schätze, es ist Zeit, den Dev Server erneut zu starten.
E Net Arch
1
Eine andere Möglichkeit besteht darin, Docker anstelle von VirtualBox in Verbindung mit dem Android-Emulator zu verwenden.
Matt Welke
1
Oder führen Sie Vagrant mit KVM aus.
Michael Hampton
Danke @MichaelHampton. Ich habe vagrant-libvert installiert und es hat funktioniert!
Jchook
30

Ich habe den gleichen VirtualBox-Konflikt. Es wurde mit ABI gelöst, das sich von "x86" unterscheidet (in meinem Fall armeabi-v7a).

Stanislav Makarenko
quelle
Viel eleganter als das Herunterfahren der vorhandenen VM. Vielen Dank.
MonoThreaded
2
Traurig, das zu hören.
MatBee
Vermutlich läuft der Emulator auf diese Weise langsam, aber es ist eine Option.
ToolmakerSteve
In meinem Fall muss zum Ausführen auch die VirtualBox-VM (für RDP) ausgeführt werden. Dies war also ein wirklich guter Rat.
Csaba Toth
2
@rudolfbyker, die Antwort besagt, dass Emulatoren, die mit CPU / ABI x86 / x86_64 ausgeführt werden, viel schneller sind, aber dieselbe KVM (Kernel-basierte virtuelle Maschine) wie VitualBox verwenden. Erstellen eines Emulators mit einer anderen CPU, wie arm64, nicht Konflikt mit VirtualBox, aber Emulator ist ein viel langsamer.
Jayeffkay
16

Ich habe die virtuellen Maschinen gestoppt, die ich mit VirtualBox ausgeführt habe. Dadurch verschwand der Fehler.

Ole Tange
quelle
Dies funktionierte für mich in Fedora 20. Bei größeren Displays, mehr RAM und Gnome 3-Arbeitsbereichen kann man leicht vergessen, dass irgendwo im Hintergrund ein anderer Computer ausgeführt wird. killall virtualboxSollte es tun.
Ray Foss
Funktioniert aber nicht die beste Lösung. Sie können beide haben (siehe Stanislavs Antwort)
MonoThreaded
Ich hatte dieses Problem mit Ubuntu 16, als ich Docker-Maschinen- und Virtual-Box-Treiber verwendete. Das Stoppen der VMS mit hat docker-machine stop machine-namedas Problem behoben, wie in dieser Antwort vorgeschlagen
Benjamin Slabbert
Es stellt sich heraus, dass das Herunterfahren der VirtualBox-Benutzeroberfläche und der VMs nicht ausreicht. In meinem Fall liefen noch mehrere Virtualbox-Prozesse: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD. Das Töten in top / htop löste das Problem.
Babken Vardanyan
Die Frage war: "Wie kann ich beide gleichzeitig zum Laufen bringen?".
Stephen M -on Streik-
5

Ich hatte das gleiche Problem unter Ubuntu 13.10. Versuchen Sie, die Kernelmodule kvm und kvm_intel zu entfernen.

Um dies zu tun:

  1. Stoppen Sie alle Emulatoren.
  2. Führen Sie den Befehl aus: 'sudo rmmod kvm_intel kvm'

Ohne diese Kernelmodule können Virtualbox- und Android-Emulatoren gleichzeitig arbeiten.

Übrigens weiß ich nicht, warum die Module geladen sind.

Alexander Zhukov
quelle
16
Ein Wort der Warnung: Während dies funktioniert, führt das Entfernen der KVM-Kernelmodule zu einer erheblichen Leistungsminderung des Intel Android-Images, da Sie die Hardwarebeschleunigungsunterstützung der CPU ohne die Kernelmodule verlieren.
JustJohn
1
@ Tajchert: um zurückzukehren: 'sudo modprobe kvm_intel kvm'
Splitlocked
x86 ... Emulatoren lehnten es ab, ohne KVM-Module zu laufen. Bah.
Martlark
beide Treiber werden benötigt
user1121055
5

Es gibt endlich eine Lösung dafür.

Befolgen Sie diese Schritte für macOS :

  1. Gehen Sie in Android Studio zu Extras -> Android -> SDK-Manager

  2. Stellen Sie sicher, dass Sie die neueste Version von Intel Emulator Accelerator HAXM installiert haben (v6.1.1) Einstellungsfenster in Android Studio.

  3. Wechseln Sie in das extrasVerzeichnis des Android SDK-Speicherorts, das in den Einstellungen angezeigt wird. Unter MacOS können Sie dies tun:

    open ~/Library/Android/sdk/extras

  4. Installieren Sie die HAXM-Verpackung, indem Sie IntelHAXM_6.1.1.dmg öffnen, dann IntelHAXM_6.1.1.mpkg im bereitgestellten Ordner öffnen und den Anweisungen des Installationsprogramms folgen.

Befolgen Sie diese Schritte für Windows :

  1. Gehen Sie in Android Studio zu Extras -> Android -> SDK-Manager

  2. Stellen Sie sicher, dass Sie die neueste Version von Intel Emulator Accelerator HAXM installiert haben (v6.1.1) Einstellungsfenster in Android Studio.

  3. Wechseln Sie in das extrasVerzeichnis des Android SDK-Speicherorts, das in den Einstellungen angezeigt wird. Etwas wie:

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

  4. In diesem Verzeichnis befindet sich eine Art Datei wie intelhaxm-android.exe. Starte es.

Pflüger
quelle
2
Gibt es auch ein Update für Ubuntu 16.04.3?
Schleifern
HAXM unterstützt keine verschachtelten virtuellen Maschinen!
Jorgesys
Was ist mit KVM? Wie kann ich das gleiche tun?
Vadim Kotov
Hier geht es nicht um verschachtelte virtuelle Maschinen. Das Problem in diesem Thema betrifft virtuelle Maschinen nebeneinander. Und es macht absolut keinen Sinn, dass dies nicht funktionieren sollte
Lothar
Und für Linux gibt es keine Lösung. Wieder Pech für Linux. Dies bedeutet, dass ich jetzt Windows als meinen Build-Server auswählen muss.
Lothar
4

Sie können die CPT / ABI-Einstellung auch von x86 ändern, um die Emulatoreinstellungen zu aktivieren.

0x8BADF00D
quelle
2
Aber dann wird der Emulator höllisch langsam sein ... aber zumindest können Sie beide gleichzeitig
ausführen
4

Ich habe dieses Problem endlich beseitigt, indem ich Genymotion anstelle des Standard-Android-Emulators verwendet habe. Abgesehen davon, dass dieser Konflikt nicht auftritt, ist er um ein Vielfaches schneller als der normale Emulator.

Bananeweizen
quelle
Ist das eine freie Software?
Vishnu Viswanath
@vishnu viswanath Nur für nichtkommerzielle Anwendungsfälle. Lesen Sie hier mehr unter genymotion.com/legal/terms-and-conditions unter "Lizenz erteilt: Limited". Darin heißt es: Diese Lizenz wird nur dem Endbenutzer und ausschließlich im Zusammenhang mit dem persönlichen Gebrauch gewährt. Der Endbenutzer ist eine Einzelperson und kein Fachmann, der die Anwendung für persönliche und private Zwecke herunterlädt, mit Ausnahme des kommerziellen und beruflichen Umfelds.
Mykolaj
1
Dies ist wahrscheinlich verschwunden, weil Genymotion kein KVM verwendet hat. Weder stabil (weil sie irgendwann anfangen werden, es zu benutzen) noch eine performante Lösung.
Hi-Angel
Vielen Dank, dass Sie diese Option auskommentiert haben. Ich würde Genymotion für den persönlichen Gebrauch in Ubuntu 18.04 installieren und kann jetzt meine VirtualBox-Maschinen gleichzeitig verwenden :)
Fer B.
3

Eine andere Lösung besteht darin, einen von libvirt unterstützten Vagrant mit dem Vagrant-Libvirt- Plugin zu verwenden.

DHH
quelle
2

Es ist zwar auch eine Problemumgehung, aber definitiv besser als die Deaktivierung von KVM, wie alle vorschlagen.

Führen Sie stattdessen einfach den Virtualbox-Gast in KVM aus. Zum Beispiel ( kvmhier ist nur ein Skript, in dem a ausgeführt wird qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl
Hallo Engel
quelle
Dies löste das Problem für mich, aber ich kann nicht herausfinden, wie ich mein virtuelles Image dazu bringen kann, eine Verbindung zum Internet herzustellen, und aus irgendeinem Grund ist die Keybord-Zuordnung völlig durcheinander.
MikeSchem
@ MikeSchem Ja, leider ist die Konfiguration eines Netzwerks in KVM / QEMU eine große Sache. Als ich die Antwort schrieb, hatte ich keine Zeit, das Netzwerk in Betrieb zu nehmen, da Windows-Gäste nach einigen Manipulationen beim Start in KVM mit BSOD zusammenfielen, während sie noch in VB arbeiteten.
Hi-Angel
1

In einigen Fällen müssen wir die Virtualbox-Maschinen am Laufen halten. Lassen Sie daher alle Virtualbox-Maschinen weiter laufen. Wechseln Sie zum physischen Mobilgerät, um Ihre Anwendung anstelle des Emulators zu testen.

Sie können expo verwenden, wenn Sie mit React-Native oder Ihrem echten Android / iOS-Gerät arbeiten.

Ashwin J Chhetri
quelle
0

Dies könnte aufgrund der Tatsache, dass OP gleichzeitig VirtualBox + KVM angefordert hat, nicht zum Thema gehören, aber dennoch könnte es die Problemumgehung sein: Ich suchte nach einer Möglichkeit, Windows 7 und AVD unter Ubuntu 18.10 x64 zu starten. Das Ausschalten von KVM ist keine Option, da die Leistung von AVD für mich von entscheidender Bedeutung ist. Ich habe Windows 7 über Virtual Machine Manager (virt-manager package) installiert und jetzt sind sowohl AVD als auch Windows 7 hardwarebeschleunigt.

Vokasle
quelle
0

Hier ist, wie dieses Problem mithilfe von Vagrant und den beiden Plugins 'libvirt' und 'mutate' gelöst wurde :

  1. Öffnen Sie das Terminal und legen Sie die Umgebungsvariablen fest:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. Kopieren Sie nun den vom letzten Befehl erhaltenen Code wie "c1530713-aec2-4415-a6b5-b057928c7e5f" und verwenden Sie ihn wie folgt:

    Vagabundpaket - Basis c1530713-aec2-4415-a6b5-b057928c7e5f - Ausgabefenster7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. Sie müssen einige vagabundierende Plugins wie libvirt und mutate installieren . Mutate konvertiert .box in libvirt VM:

    vagrant plugin install vagrant-libvirt vagrant plugin install vagrant-mutate

  4. Vagrant Box in libvirt konvertieren:

    vagrant mutate window7_.box libvirt

  5. Jetzt können Sie die vagabundierende VM initialisieren. Wenn ein Fehler weiterhin besteht, bearbeiten Sie Ihre Vagrant-Datei. Wie bei mir kommentiere ich, dass die Zeile mit config.vm.network beginnt und dann den folgenden Befehl ausführt :

    vagrant up --provider=libvirt

So konnte ich diesen Fehler vollständig beseitigen

Muhammad Tayyab
quelle