Recentemente passei por alguns problemas para fazer funcionar o emulador do Android SDK instalado juntamente com o Android Studio 2.3.3 em máquinas Ubuntu de onde trabalho.
Configuração das máquinas:
Intel® Core™ i7 CPU 870 @ 2.93GHz × 8
8GB de RAM
Ubuntu 16.04 64bit
A princípio, uma configuração suficiente pra rodar o Android Studio, mais precisamente o emulador que dava problema. Tanto na minha como nas máquinas de 2 colegas.
Depois de muitas pesquisas na documentação do Android Studio, stackoverflow e outros sites relacionados chegamos à solução do problema.
Problema:
Antes de chegar na questão, passamos por outras situações, tais como a solicitação de instalação do Intel HAXM (Hardware Accelerated Execution Manager) ou KVM (Kernel-based Virtual Machine), configuração de BIOS para habilitar a virtualização do processador, entre outros.
Após pesquisas vimos que era algo bem comum. Com vários relatos, inclusive de casos que funcionavam antes, mas não após o upgrade pra versão 2 do Android Studio.
Após a resolução das configurações iniciais citadas, chegamos num ponto em que o emulador é iniciado, mas dá crash, às vezes logo de início, às vezes no início do carregamento do sistema operacional.
Um das causas do problema parece estar relacionada à interface gráfica Unity, já que vimos soluções em que a mudança para o Mate resolveria, mas não era algo aplicável ao nosso caso.
Cheguei a pensar se o fato de usar um processador Intel de 1ª geração poderia ser complicador também, já que no meu notebook com processador de 5ª geração (i5-5200U) e 8GB de RAM o emulador rodou normalmente.
Solução:
Inicialmente, a CPU precisa suportar uma das seguintes tecnologias de virtualização:
- Intel Virtualization Technology (VT, VT-x, vmx) extensions
- AMD Virtualization (AMD-V, SVM) extensions (Linux only)
A chave de tudo é fazer funcionar o processo de aceleração
1) Aceleração de hardware
Ao usar aceleração de hardware seu emulador deve rodar mais rapidamente, mas o problema que temos é que exatamente por tentar usar isso que o erro ocorre. Muito provavelmente você está usando o driver SL Nouveau. Ele acaba tornando a renderização gráfica mais lenta ou ocasiona o crash.
Solução: atualizar/modificar o driver da placa de vídeo. No meu caso a placa era uma GeForce 8400. Bastou reverter para o driver do fabricante nvidia-340 que já estava até instalado, mas não em uso.
2) Se ainda assim não der certo... usar Aceleração via software
Aceleração via software é útil somente se o computador não dispõe de drivers gráficos compatíveis com o emulador. A imagem do Android deve ser criada definindo a opção Emulated Performance: Graphics como 'Software' para assim não usar a GPU do host. Mesmo com esse procedimento só funcionou a versão Lollipop do Android no nosso caso.
Além disso foram necessários mais alguns comandos:
- Instalação de bibliotecas:
sudo apt-get install lib64stdc++6:i386
sudo apt-get install mesa-utils
- Copiar pastas lib, lib64 e qemu da pasta emulator para tools dentro de $ANDROID_SDK.
Na pasta '$ANDROID_SDK/emulator/lib64':
mv libstdc++/ libstdc++.bak
- Linca pasta do emulador pra pegar as bibliotecas do sistema
Na pasta '$ANDROID_SDK/emulator/lib64':
ln -s /usr/lib64/libstdc++.so.6 libstdc++
- Para rodar o emulador via linha de comando:
Na pasta '$ANDROID_SDK/tools$:
./emulator -list-avds
Na pasta '$ANDROID_SDK/tools$:
./emulator -use-system-libs -avd Nexus_5X_API_22
Em alguns casos não precisa do -use-system-libs. Em outros dá pra rodar direto do Android Studio.
Em qualquer dos casos, se prepare que muita memória vai ser consumida. Nem 8GB é o bastante quando uma aplicação está rodando e com navegadores e outros programas abertos.
Observação: você não pode rodar uma VM dentro de outra VM como VirtualBox ou VMWare. Você deve rodar o emulador diretamente do seu hardware.