O emulador do Android e o virtualbox não podem ser executados ao mesmo tempo

104

Sempre que tenho o Virtualbox em execução, não consigo iniciar uma imagem do emulador Android (e vice-versa). A mensagem de erro no gerenciador AVD é

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

Como posso fazer os dois funcionarem ao mesmo tempo?

Trata-se de um Ubuntu 64 bits, todo o software envolvido é da última versão lançada.

Bananeweizen
fonte

Respostas:

40

Remover os módulos do kernel kvm (usando 'sudo rmmod kvm_intel kvm') torna possível executar o Virtualbox e o emulador Android ao mesmo tempo, mas o desempenho do emulador Android em tal configuração é extremamente ruim. Se possível, é melhor desligar o emulador Virtualbox e descarregar seu driver (vboxdrv) executando 'sudo /etc/init.d/vboxdrv stop'. O Google sugere essa "solução" em sua página do Android Emulator na seção sobre Linux.

traber
fonte
9
Meu back-end é necessário para que o aplicativo execute dados no VirtualBox (Vagrant), então essa não é uma ótima opção: P
Richard de Wit
4
Esta solução # @%! É devido ao fato de que eu preciso rodar ambos ao mesmo tempo .. meu serviço HTTPD está no Virtual Box, enquanto meu App está no Android .. / me suspira. Acho que é hora de iniciar o Dev Server novamente.
E Net Arch
1
Outra opção pode ser usar o Docker em vez do VirtualBox em conjunto com o emulador Android.
Matt Welke
1
Ou execute o Vagrant com KVM.
Michael Hampton
Obrigado @MichaelHampton. Eu instalei o vagrant-libvert e funcionou!
jchook
30

Eu tenho o mesmo conflito do VirtualBox. Resolvido usando ABI diferente de "x86" (armeabi-v7a no meu caso)

Stanislav Makarenko
fonte
Muito mais elegante do que desligar a VM existente. Obrigado.
MonoThreaded
2
Triste por ouvir isso.
MatBee
Presumivelmente, o emulador será executado lentamente dessa forma, mas é uma opção.
Toolmaker Steve
No meu caso, também preciso do VirtualBox VM para rodar (para RDP), então esse foi um conselho muito bom.
Csaba Toth
2
@rudolfbyker, a resposta diz é que emuladores que rodam com CPU / ABI x86 / x86_64 são muito mais rápidos, mas usam o mesmo KVM (máquina virtual baseada em kernel) que o VitualBox. Criando um emulador com outra CPU, como arm64, não conflito com o VirtualBox, mas emulador é um muito mais lento.
Jayeffkay
16

Parei as máquinas virtuais que estava executando com o VirtualBox. Isso fez o erro desaparecer.

Ole Tange
fonte
Isso funcionou para mim no Fedora 20. Com telas maiores, mais RAM e espaços de trabalho do Gnome 3, é fácil esquecer que você está executando outra máquina em algum lugar no fundo. killall virtualboxdeve fazer isso.
Ray Foss
Funciona, mas não é a melhor solução. Você pode ter os dois (ver a resposta de Stanislav)
MonoThreaded
Eu tive esse problema com o Ubuntu 16 ao usar a máquina docker e drivers de caixa virtual. interromper o vms com docker-machine stop machine-nameresolveu o problema, conforme sugerido neste asnwer
Benjamin Slabbert
Acontece que apenas desligar a GUI do VirtualBox e as VMs não resolverá o problema. No meu caso eu tinha vários processos de caixa virtual ainda em execução: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD. Matá-los em top / htop resolveu o problema.
Babken Vardanyan
A pergunta era 'Como posso fazer os dois funcionarem ao mesmo tempo?'.
Stephen M - em greve -
5

Eu tive o mesmo problema no Ubuntu 13.10. Tente remover os módulos do kernel kvm e kvm_intel.

Para fazer isso:

  1. Pare todos os emuladores.
  2. Execute o comando: 'sudo rmmod kvm_intel kvm'

Sem esses módulos do kernel, o Virtualbox e os emuladores do Android podem funcionar ao mesmo tempo.

BTW, não sei por que os módulos são carregados.

Alexander Zhukov
fonte
16
Um aviso: embora isso funcione, a remoção dos módulos do kernel KVM causará uma diminuição substancial no desempenho com a imagem Intel Android, já que você perderá o suporte de aceleração de hardware da CPU sem os módulos do kernel.
JustJohn
1
@Tajchert: para reverter: 'sudo modprobe kvm_intel kvm'
Splitlocked em
x86 ... emuladores recusaram-se a rodar sem módulos KVM. Bah.
Martlark
ambos os drivers são necessários
user1121055
5

Finalmente existe uma solução para isso.

Siga estas etapas para macOS :

  1. No Android Studio, vá para Ferramentas -> Android -> SDK Manager

  2. Confirme se você tem a versão mais recente do Intel Emulator Accelerator HAXM instalada (v6.1.1) Painel de preferências no Android Studio.

  3. Vá para o extrasdiretório do local do Android SDK exibido nas preferências. No MacOS, você pode fazer isso:

    open ~/Library/Android/sdk/extras

  4. Instale a embalagem HAXM abrindo IntelHAXM_6.1.1.dmg, depois abrindo IntelHAXM_6.1.1.mpkg na pasta montada e seguindo as instruções do instalador.

Siga estas etapas para Windows :

  1. No Android Studio, vá para Ferramentas -> Android -> SDK Manager

  2. Confirme se você tem a versão mais recente do Intel Emulator Accelerator HAXM instalada (v6.1.1) Painel de preferências no Android Studio.

  3. Vá para o extrasdiretório do local do Android SDK exibido nas preferências. Algo como:

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

  4. Nesse diretório está algum tipo de arquivo intelhaxm-android.exe. Executá-lo.

lavrador
fonte
2
Existe também uma correção para o Ubuntu 16.04.3?
lixadeiras
HAXM não suporta máquinas virtuais aninhadas!
Jorgesys
E quanto ao KVM? Como posso fazer o mesmo?
Vadim Kotov
Não se trata de máquinas virtuais aninhadas. O problema neste tópico é para máquinas virtuais lado a lado. E não faz absolutamente nenhum sentido que isso não funcione,
Lothar
E não há solução para o Linux. Má sorte novamente para o uso do Linux. Isso significa que tenho que escolher o windows agora como meu servidor de compilação.
Lothar de
4

Você também pode alterar a configuração CPT / ABI de x86 para armar nas configurações do emulador.

0x8BADF00D
fonte
2
Mas então o emulador vai ficar muito lento ... mas pelo menos você pode rodar os dois ao mesmo tempo;)
biophonc
4

Finalmente tornei esse problema obsoleto usando Genymotion em vez do emulador Android padrão. Além de não ter esse conflito, é várias vezes mais rápido que o emulador normal.

Bananeweizen
fonte
este é um software livre?
vishnu viswanath
@vishnu viswanath Somente para casos de uso com fins não comerciais. Leia mais aqui genymotion.com/legal/terms-and-conditions abaixo "Licença concedida: Limitada". Que diz: Esta licença é concedida ao usuário final única e exclusivamente em conexão com o uso pessoal, o usuário final é um indivíduo, e não um profissional, que baixa o aplicativo para necessidades pessoais e particulares, excluindo o ambiente comercial e profissional.
mykolaj
1
Isso provavelmente desapareceu porque o genymotion não usava KVM. Nem estável (porque em algum momento eles vão começar a usar) , nem solução de desempenho.
Hi-Angel,
Obrigado por comentar esta opção. Eu instalaria Genymotion para uso pessoal no Ubuntu 18.04 e agora posso usar minhas máquinas VirtualBox ao mesmo tempo :)
Fer B.
3

Outra solução é usar o vagrant apoiado pela libvirt usando o plugin vagrant-libvirt .

DHH
fonte
2

Embora seja uma solução alternativa, mas definitivamente melhor do que desativar o KVM, como todos sugeriram.

Basta executar o convidado virtualbox no KVM. Por exemplo ( kvmaqui está apenas um script executando a qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl
Olá anjo
fonte
Isso resolveu o problema para mim, no entanto, não consigo descobrir como fazer minha imagem virtual se conectar à internet e por algum motivo o mapeamento do teclado está todo confuso.
MikeSchem
@MikeSchem sim, infelizmente configurar uma rede em KVM / QEMU é um grande negócio. Na época em que escrevi a resposta, não tenho tempo de colocar a rede em funcionamento porque, após algumas manipulações, o convidado do Windows começou a cair com BSOD na inicialização do KVM, enquanto ainda trabalhava no VB.
Hi-Angel
1

Em alguns casos, precisamos manter as máquinas da caixa virtual em funcionamento, portanto, deixe todas as máquinas da caixa virtual continuarem em execução, mude para o dispositivo móvel físico para testar seu aplicativo em vez do emulador.

você pode usar o expo se estiver usando o react-native ou o seu verdadeiro dispositivo android / ios.

Ashwin J Chhetri
fonte
0

Isso pode estar fora do assunto, devido ao fato de que OP solicitou VirtualBox + KVM ao mesmo tempo, mas ainda assim, pode ser a solução alternativa: Eu estava procurando uma maneira de iniciar o Windows 7 e o AVD no Ubuntu 18.10 x64. Desligar o KVM não é uma opção devido ao fato de que o desempenho do AVD é crítico para mim. Instalei o Windows 7 através do Virtual Machine Manager (pacote virt-manager) e agora tanto o AVD quanto o Windows 7 são acelerados por hardware.

vocasle
fonte
0

Aqui está como resolvido esse problema, usando o vagrant e seus dois plug-ins 'libvirt' e 'mutate':

  1. Abra o terminal e defina as variáveis ​​de ambiente:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. Agora copie o código obtido do último comando como "c1530713-aec2-4415-a6b5-b057928c7e5f" e use o seguinte:

    pacote vagrant --base c1530713-aec2-4415-a6b5-b057928c7e5f --output window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. Você precisa instalar alguns plugins vagrant como libvirt e mutate . Mutate irá converter .box em libvirt VM:

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

  4. Convertendo vagrant box em libvirt:

    vagrant mutate window7_.box libvirt

  5. Agora você pode inicializar a VM vagrant. Se algum erro persistir, vá para editar seu arquivo Vagrant. Como para mim, descomentei a linha que começa com config.vm.network e, em seguida, executo o comando abaixo:

    vagrant up --provider=libvirt

Foi assim que consegui me livrar completamente desse erro

muhammad tayyab
fonte