A Solução Android para Distros Linux

Sem MEmu ou mesmo BlueStacks para Linux, qual a melhor solução para emular Android nas distros? Temos uma resposta com QEMU e Android-x86.


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

Historicamente sabemos que os principais emuladores de Android só existem para Windows. O MEmu® e o BlueStacks® não funcionam no Linux, nem com WINE, nem qualquer outro método.

Obviamente há alternativas a eles:

  • Anbox
  • Genymotion
  • Android-X86
  • RemixOS
  • Dentre outros….

O Anbox e o Genymotion são soluções diretas muito semelhantes ao BlueStacks, uma aplicação que permite executar ROM’s Android; porém seu desempenho é muito baixo, sendo viáveis para desenvolvedores e não necessariamente para quem gostaria de jogar FreeFire® no PC, por exemplo.

O Android-X86 e o RemixOS são sistemas x86 para instalar em desktops, tornando-os Chromebooks. É uma solução interessante, mas não resolve bem nosso problema: Você teria que formatar seu computador para usá-lo!

  • Mas afinal, como eu vou rodar Android numa distro Linux sem muito sofrimento e com desempenho minimamente decente?

Bem, graças ao Android-x86 + o poder do QEMU.

1.1 android-x86

Android-x86 é um projeto gratuito e de código aberto que visa fornecer imagens Android para sistemas x86. Com novos recursos, vários patches de compatibilidade e correções de bugs no Android Open Source Project, o Android-x86 é a solução mais robusta atualmente disponível para desktops x86.

Este artigo descreve como instalar o Android-x86 no QEMU com aceleração total de hardware no Ubuntu, permitindo que você jogue jogos 3D e execute os principais aplicativos Android.

1.2 QEMU

Qemu é uma solução de virtualização de hardware para Linux que permite a emulação de um sistema operacional inteiro instalado em um disco virtual. VirGL é um renderizador OpenGL adicionado a compilações QEMU recentes, ele permite que você crie uma placa de vídeo virtual capaz de 3D dentro da máquina virtual QEMU. Já abordamos o poderio do QEMU + KVM nesta publicação!

Usando uma combinação das tecnologias Android-x86, QEMU e VirGL, inicializaremos e instalaremos o sistema operacional Android completo em uma máquina virtual.

2. Observações

Antes de mais nada, preciso ater a algumas observações para deixar claro o que você leitor pode esperar desse sistema:

  • Muitos games e apps não vão rodar por pura e simples incompatibilidade. Um exemplo é The Sims® FreePlay
  • Haverão games que vão executar bem, mas devido a proteções anti-cheat, como o caso do FreeFire, você ficará sem poder clicar na tela, devendo recorrer a aplicativos terceiros que permitam isso.
  • Outros games e apps vão rodar muito bem. Um exemplo é o Asphalt® 9, que não roda no MEmu no Windows porém rodou no sistema do qual falaremos neste tutorial.
  • Podem haver instabilidades com o OpenGL: Não há garantias que rodará perfeitamente sempre. Ou seja, de vez em quando o emulador vai congelar e reiniciar sozinho, voltando com uma imagem quebrada.

Entre os bugs, o mais comum é dar de cara com um Bigger Mouse

Basta reiniciar o computador que tudo volta ao normal.
Ou seja, não recomendo seu uso em produção! Para isso use o Anbox ou Genymotion.

  • Se você utiliza um notebook hibrido com placa de vídeo NVIDIA®, é bem possível que o sistema não vai funcionar com a NVIDIA! Você deve mudar as configurações e ativar a Intel como placa primária para poder executá-lo. Considerando que a maioria dos apps é leve, mesmo o Asphalt 9 numa Intel HD Graphics 630 rodará a 60 fps.
  • O desempenho e compatibilidade final do sistema dependerá diretamente do poder de hardware que você dispor.

3. Instalação no Sistema

Uma nota de compatibilidade: este guia foi testado com o Ubuntu 20.10 e as instruções abaixo funcionarão com o Ubuntu 20.10 ou versões mais recentes após essa publicação. QEMU em versões mais antigas do Ubuntu não tem suporte para VirGL. Você também precisa ter uma CPU compatível com máquina virtual baseada em kernel (KVM) em seu sistema.

A maioria das CPUs modernas tem suporte para KVM, mas você pode verificar sua presença executando o comando abaixo:

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

Qualquer número maior que 0 implica em suporte KVM. Você ainda precisa se certificar de que a virtualização está habilitada no BIOS. Mais informações podem ser encontradas aqui.

Começaremos instalando os pacotes QEMU necessários e adicionando o nome de usuário ao grupo KVM. Execute os comandos abaixo para sistemas baseados em Debian, Ubuntu e derivados:

$ sudo apt instalar qemu qemu-kvm
$ sudo adduser `id -un` kvm

Reinicialize seu sistema. Baixe a imagem ISO do Android-x86 aqui . Execute o seguinte comando para criar um disco rígido virtual na pasta de trabalho do terminal – se preferir, clique direito numa pasta que deseja deixar o disco virtual e clique em “abrir terminal aqui”:

$ qemu-img create -f qcow2 androidx86_hda.img 10G

Você pode substituir 10G por qualquer número e isso criará um disco virtual desse tamanho em GB. Recomendo no mínimo 10 Gb, já que o sistema e os apps básicos atualizados consomem aproximadamente 3.2 Gb

Importante frisar que se for 10 Gb, ele vai até 10 Gb, sendo expansível. Ou seja, vai começar com 3.3 Gb aproximadamente e aumentar gradativamente á medida que você instalar mais aplicações.

4. Instalação da Máquina Virtual

Para inicializar na imagem Live Install do Android-x86 dentro de uma máquina virtual QEMU, execute o comando:

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-dispositivo virtio-mouse-pci -dispositivo virtio-keyboard-pci \
-serial mon: stdio \
-boot menu = on \
-net nic \
-net user, hostfwd = tcp :: 5555 -: 22 \
-dispositivo virtio-vga, virgl = on \
-display gtk, gl = on \
-hda androidx86_hda.img \
-cdrom android-x86_64- 8.1 -r3.iso

Observe os argumentos “hda” e “cdrom”. Você precisa ter certeza de que eles correspondem aos nomes do disco rígido virtual e à imagem iso do Android-x86 baixada. 

Além disso, observe acima a memória RAM reservada: 2048 (2Gb) e a quantidade de núcleo do processador: 2.

CASO DESEJE, pode aumentar esses valores!

Mas lembre-se: Você não pode alterar o número de processadores e a quantidade de memória RAM depois que o sistema estiver instalado. O Android é muito sensível a mudanças de hardware e vai corromper se você o fizer após instalado.

Se você seguiu as instruções corretamente até aqui, deverá ver uma nova janela:

Selecione a entrada “Instalação” e espere a tela de particionamento aparecer.

Aperte a tecla C e escolha “Criar / Modificar partições” e depois responda se desejar particionar como GPT, clique “Yes”.

Ignore a mensagem de erro pressionando qualquer tecla a seguir. Você verá um gerenciador de partição:

Selecione “NEW” e continue a pressionar a tecla <Enter> para os próximos quatro prompts. Você não precisa especificar nada nos prompts. Uma vez feito isso, você verá o sistema de arquivos recém-criado no gerenciador de partição, conforme mostrado na imagem abaixo:

Clique na opção “WRITE” e digite “yes” para confirmar. Selecione a opção “QUIT” para sair do gerenciador de partição. Escolha a partição “sda1” na próxima tela pressionando ENTER:

Escolha EXT4 como formato de partição:

Pressione YES para confirmar que deseja formatar a partição.

Escolha “YES” quando questionado sobre instalar o carregador de inicialização GRUB.

Na próxima tela, você pode ver um aviso sobre a conversão para “MBR”. Selecione “YES”.

Há uma tela nova, que pergunta se você deseja ter o diretório /system como somente-leitura. Isso é para desenvolvedores, no nosso caso, pressione NO.

Não selecione nenhuma opção. Feche a janela da máquina virtual neste passo:

5. Configuração

O Android-x86 agora está totalmente instalado em uma máquina virtual QEMU. Para inicializar no sistema operacional recém-instalado, usaremos o mesmo comando extenso acima, enquanto omitimos o argumento “cdrom”.

SIM, sempre que você executar esta máquina virtual, use o comando para tal. Agiliza as coisas, já que nem todos sistemas possuem uma interface de usuário bonitinha para tal.

qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-soundhw es1370 \
-dispositivo virtio-mouse-pci -dispositivo virtio-keyboard-pci \
-serial mon: stdio \
-boot menu = on \
-net nic \
-net user, hostfwd = tcp :: 5555 -: 22 \
-dispositivo virtio-vga, virgl = on \
-display gtk, gl = on \
-hda androidx86_hda.img

Lembrando: Se você alterou a quantidade de núcleos do processador e quantidade de memória RAM no primeiro comando, altere aqui também!

Você verá o logotipo de inicialização do Android e, em seguida, execute primeiro a tela de configuração.

Mouse e Teclado devem funcionar normalmente aqui. Se o notebook for touchscreen, poderá usar desse recurso também.

Basta passar pela configuração para chegar à tela inicial. Android-x86 tem suporte completo para Play Store integrado. Observe que a máquina virtual em execução irá capturar todos os pressionamentos de tecla e eventos do mouse.

Caso deseje, para liberar o teclado e o mouse da máquina virtual, você terá que pressionar a combinação de teclas <CTRL + ALT + G>.

  • Conexão á Internet, como proceder?
    Muito simples. Basta conectar-se á unica “rede wifi” disponível na lista, que se chama “VirtWifi”.

Drivers de vídeo, drivers do teclado e mouse e outros drivers referentes ao QEMU rodando o Android já estão todos inclusos no grande “comando” de execução utilizado anteriormente. A parte virgl=on é a que habilita a aceleração 3D ao sistema.

6. Utilização

Tela inicial pode ser totalmente customizada. Num exemplo:

Nas configurações do sistema, note a aceleração de hardware 3D, com passthrough out-of-the-box graças ao VirtIO ativo no QEMU e o suporte 3D é fornecido pelo OpenGL:

A partir daqui, você está livre para logar com sua conta Google – se já não o fez na instalação do sistema – e instalar aplicações e jogos!

7. Desempenho

Testei vários games, entre eles 1 que eu sei que normalmente não executa no MEmu: Asphalt 9, que possui um gráfico soberbo e exige mais do hardware. Foi um bom exemplo de teste de estresse!

A loucura foi tanta, que executei o jogo num notebook Lenovo Core i5 de 4ª geração, 8 Gb de memória RAM e de placa gráfica uma Intel HD Graphics 4400. O resultado?

Tela de carregamento

Tela de seleção do veículos

Gameplay

O gameplay está longe de ser a coisa mais fluída desse universo, devido ás limitações do hardware e ás exigências do jogo em si. Porém ter aberto e executado com frames oscilando entre 15 e 30 FPS, já foi uma evolução formidável, considerando que não usei sequer Vulkan mas somente OpenGL aqui!

Um detalhe, o jogo ja crashou comigo pelo menos 3x, reiniciando a máquina virtual. Reinicie seu PC, entre novamente e tudo estará normal. Ele pode crashar durante o carregamento, algo absolutamente normal.

Tentei testar o FreeFire, porém ao contrário do MEmu por exemplo, não há um suporte a emular clique da tela touch com mouse; para tal requer que o jogador instale um app que faça tal processo, por ser algo que não vem nativo no Android-x86.

Note que até roda! Mas no momento que inicia-se uma partida, o teclado e mouse desaparecem do game.

Caí até spawnar na ilha. Totalmente sem controle.
Porém os menus funcionam normalmente. Acredito que seja algum anti-cheat/anti-hack que proíbe teclado e mouse!

8. FAQ

Coisas importantes que você deve saber imediatamente!

  • Você pode personalizar o comando que usamos acima até certo ponto: a opção “-m” é para RAM, a opção “-smp” é para núcleos de CPU. Se você quiser explorar todas as opções, o Gentoo Wiki tem uma explicação muito boa.
  • O comando <CTRL + ALT + F> alternará a experiência para tela cheia.
  • Nem tudo vai funcionar na máquina virtual, bluetooth por exemplo.
  • A versão mais recente do Android-x86 vem com suporte para janelas de formato livre. Você pode minimizar, maximizar, restaurar janelas e colocá-las em cantos, assim como faria em um sistema operacional de desktop – Isso muito se assemelha ao Chromebook.
  • O Android-x86 está atrasado em relação à versão atual do Android, sendo a versão mais atual, até o fechamento desta publicação, o 7.1 Nougat. No entanto, isso não afetará sua capacidade de executar aplicativos e jogos, não há aplicativos e jogos listados como “incompatíveis com sua versão do android” ou “incompatíveis com seu dispositivo”. Basicamente se não rodarem… não vão rodar, vão crashar assim que iniciarem.
  • Para desligar a máquina virtual sem correr o risco de corromper o sistema, prefira usar a interface Taskbar – mais semelhante á de um desktop Chromebook -, ela adiciona um menu de energia ao menu “Iniciar”. Caso prefira a outra interface de usuário, mais semelhante á de um tablet, para desligar abra o app Emulador de Terminal e digite: reboot -p. Evite desligamentos abruptos da máquina virtual.

Maximizando a compatibilidade com Jogos e Aplicativos

Alguns aplicativos Android podem se recusar a funcionar com a arquitetura x86. O Android-x86 inclui as bibliotecas de compatibilidade ARM que ajudam muito, mas você ainda pode encontrar problemas com certos aplicativos. Ou seja, é uma mão na roda que melhora o desempenho de várias aplicações, porém não faz milagre e não garante que tudo vai funcionar.

Para habilitar esta camada de compatibilidade, clique em Configurações, vá até o menu Apps Compatibility e habilite a opção neste submenu: Enable Native Bridge. Reinicie a máquina virtual!

Desbugando a Tela

Como falei, a experiência do display é uma das coisas que ainda não está perfeita. E sim, infelizmente você terá que se contentar com a resolução que … parafraseando um amigo meu, não é bem um problema se você não se importa de ver círculos parecendo ovos.

Há meios de mudar a resolução mas, até o fechamento desta publicação, o método estava quebrando o sistema virtual. Portanto, como está, fica.

Além disso, outra coisa que infelizmente quebra o Android é a opção Zoom To Fit da janela do QEMU:

Ela sempre virá habilitada por padrão. Pelo amor de Torvalds DESABILITE imediatamente ao início da máquina virtual. Isso evitará corrompimentos do vídeo!

Notará que ao desabilitar o Zoom To Fit, o display ficará pior do que estava, esticado, não cabendo tudo na tela. Para corrigi-lo novamente, clique 1x em BEST FIT, e depois 1x em ZOOM OUT. Isso deixará o display preenchendo a tela, sem full screen e sem “corromper” que o modo “Zoom to Fit” causa.

O uso do FullScreen não causa problemas á tela, porém também deve ser habilitado com o modo Zoom to Fit desabilitado! SEMPRE.

9. Conclusão

Após várias andanças pelo Anbox, que continua com desempenho suspeito e cria muitas dependências no sistema, e depois de ver que o Genymotion se tornou enterprise – ou seja, pago – os usuários de Linux, por bizarro que seja, por LINUX que o Android seja, estão órfãos de algo que rode Android decentemente nas distros Linux.

Não há um MEmu ou mesmo um BlueStacks para Linux.

Portanto, como sempre, vamos por a mão na massa e “criar” nosso próprio emulador com o QEMU, que é historicamente sólido para rodar não apenas máquinas virtuais, mas também emular hardwares de arquiteturas diversas.

Obviamente aqui, optamos por usar um port nativo em x86 do Android, porque apesar do QEMU rodar arquitetura ARM, infelizmente o desempenho será muito ruim também.

E ai, o que acharam?
Conseguiram rodar muita coisa?
Deixe seu comentário!

Fonte:
LinuxHint

2 comentários em “A Solução Android para Distros Linux”

  1. Android studio – A IDE Oficial para Android: o Android Studio fornece as ferramentas mais rapidas para a construcao de aplicativos em todos os tipos de dispositivos Android. Code::Blocks – Code :: Blocks e uma IDE gratuita para C, C++ e Fortran, criada para atender as necessidades mais exigentes de seus usuarios. Ela e projetada para ser muito extensivel e totalmente configuravel.

    Responder
  2. Já chegou o subsystem Android para o Windows, poderíamos integrar esse arquivo ao descontinuado anbox com suporte a arm e integrar no Wine com ícones na bandeja de aplicações ou na dock a gosto do usuário é como são de código aberto da sim pra fazer!, infelizmente eu não sei programar pra fazer de imediato….

    Responder

Deixe um comentário