Acelerando seu emulador Android

Todo mundo que desenvolve apps para o Android sabe que o emulador é bem lento. No entanto, isso pode mudar se você utiliza um computador com um processador da Intel que tenha a tecnologia Intel Virtualization.

A melhoria é muito grande. Só para dar uma ideia, no meu notebook a lockscreen abriu em 10 segundos usando o AVD com o processador Intel e em 57 segundos usando o AVD com o processador ARM-based!

No site da Intel você encontra a documentação mostrando como fazer isso em ambientes Windows, Mac OS e Linux. Contudo, fiz minha versão em português, com algumas outras dicas e específica para Linux. Eu utilizei o Linux Mint 15, mas provavelmente funciona da mesma maneira no Ubuntu.

Em primeiro lugar, você tem que ter a SDK do Android instalada é claro. Se não for o caso, veja como fazê-lo neste post.

Instalando a KVM (Kernel-based Virtual Machine)

A KVM é uma solução completa de virtualização para Linux que roda em máquinas com processador Intel (x86). Para instalar e rodar a KVM primeiro você precisa checar se sua CPU suporta a virtualização de hardware, o que pode ser feito com o seguinte comando:

1
$ egrep -c '(vmx|svm)' /proc/cpuinfo

Se a resposta desse comando for 0, seu CPU não tem suporte. Se a resposta for 1 ou mais, beleza, mas ainda tem que ver se está habilitado na BIOS. Primeiro instale o pacote cpu-checker:

1
$ sudo apt-get install cpu-checker

Em seguida, faça a verificação:

1
$ kvm-ok

Sua resposta deve ser algo desse tipo:

1
2
3
INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used

Se não, sua resposta será algo como apresentado abaixo e você terá que entrar na BIOS para ativar a Intel Virtualization Technology:

1
2
3
4
INFO: KVM is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used

O próximo passo é instalar a KVM e alguns outros pacotes necessários:

1
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Depois, você deve adicionar seu usuário aos grupos kvm e libvirtd:

1
2
$ sudo adduser seu_usuario kvm
$ sudo adduser seu_usuario libvirtd

Em seguida, faça logout e login novamente para que as alterações tenham efeito.

Criando um AVD (Android Virtual Device) com o processador Intel

Primeiro, vamos intalar o pacote que dá suporte a escolha da CPU da Intel na criação do AVD. Abra o SDK Manager com o comando android e instale o pacote “Intel x86 Atom System Image” para a versão do Android que pretende usar (Figura 1). No meu caso escolhi a versão 4.2.2 porque o 4.3, que saiu ontem, ainda não tinha suporte.

Instalando o pacote da Intel com o SDK Manager Figura 1: Instalando o pacote da Intel com o SDK Manager

Em seguida, vamos criar um AVD normalmente, porém, com o processador da Intel. Abra o AVD Managet com o comando android avd. Para facilitar, usei uma definição de dispositivo da aba “Device Definitions”, no caso, o Nexus 4. Basta clicar na definição, depois em “Create ADV…”, escolher o target “4.2.2” e o CPU “Intel Atom (x86)”. Além disso, para facilitar na hora de usar com o emulador, troquei o nome do ADV para “nexus4” como pode ser visto na Figura 2.

Criando um AVD com processador Intel Figura 2: Criando um AVD com processador Intel

Ponto, agora você tem seu dispositivo virtual com o processador Intel. Agora vamos utilizá-lo no emulador:

1
$ emulator @nexus4

Se você quiser ver a diferença entre utilizar o processador Intel e o ARM, feche o emulador, edite seu AVD trocando a CPU dele para AMR e inicie o emulador novamente. A diferença é grande, né? =)

Corrigindo o erro da libGL.so

Inicie seu emulador e veja se acontece erro abaixo:

1
2
3
4
5
$ emulator @nexus4
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory

Se sim, para corrigí-lo basta encontrar o arquivo em sua máquina e criar um link simbólico na pasta onde está o Android SDK. Para encontra o arquivo:

1
2
3
4
5
6
$ sudo updatedb
$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

Como meu sistema é 64 bits, vou usar o aquivo /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 para fazer o link:

Obs: mude o ~/android para o local onde está o Android SDK na sua máquina.

1
$ ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 ~/android/sdk/tools/lib/libGL.so

Se isso não solucionar seu problema, dê uma olhada nessas respostas do stackoverflow.

Turbinando ainda mais seu emulador

Uma outra coisa que você pode fazer para acelerar ainda mais seu emulador é habilitar o uso da GPU. Basta editar seu AVD e selecionar o item “Use Host GPU”. Isso fará com que o emulador carregue ainda mais rápido (em 8 segundos na minha máquina), as animações de transição sejam mais rápidas e fluidas e os gráficos fiquem mais bonitos e bem definidos. Repare na diferença do papel de parede na Figura 3.

Diferença entre usar ou não a GPU Figura 3: Sem e com o uso da GPU

O único problema é que se você, assim como eu, utiliza o PhoneGap para desenvolver seus apps, o uso da GPU fará com que sua aplicação não abra direito, como na Figura 4. Não encontrei nenhuma solução para isso e eu mantive essa opção desmarcada. Se alguém solucionar esse problema, por favor deixe um comentário! =)

Problema do uso da GPU com apps PhoneGap Figura 4: Problema do uso da GPU com apps PhoneGap