Aplicações Android com Xamarin - parte 8 de N - Emuladores Android - André Alves de Lima
Quando desenvolvemos aplicações para a plataforma Android, se nós não tivermos um dispositivo físico à nossa disposição para testarmos a aplicação, nós teremos que utilizar uma das opções de emuladores Android disponíveis no mercado. Ou, mesmo que nós tenhamos um dispositivo físico disponível, às vezes nós não queremos utilizá-lo toda hora para testarmos a aplicação, então um emulador sempre vem bem a calhar.
Pelo que andei lendo a respeito, a emulação do Android era algo muito sofrível há alguns anos atrás. O emulador "oficial" era extremamente lento e não existiam muitas alternativas à altura.
Porém, hoje em dia nós, além do emulador oficial funcionar com uma performance boa, nós temos também algumas outras opções bem interessantes de emuladores Android, tanto gratuitas quanto pagas. No artigo de hoje eu vou mostrar para você as principais opções de emuladores Android que eu encontrei e testei nas últimas semanas. Se você utilizar algum outro emulador que seja diferente dos que eu apresentei aqui, por favor, deixe mais detalhes nos comentários.
– Parte 6: DatePicker e Spinner
– Parte 7: SQLite e armazenamento de dados
A aplicação ficou pronta!
Primeiramente, gostaria de informar que a aplicação que estávamos desenvolvendo na série ficou pronta! Estávamos com algumas pendências acumuladas nos artigos anteriores, mas eu dei conta delas nas últimas semanas:
Vocês podem dar uma olhada nas mudanças que eu fiz no código para implementar as funcionalidades acima diretamente no GitHub do projeto, filtrando para as alterações feitas nos dias 4 e 5 de janeiro de 2018.
Eu não vou detalhar essas alterações aqui nessa série, uma vez que elas não foram substanciais o bastante para renderem um artigo específico para elas. Pretendo escrever artigos mais para a frente sobre os conceitos utilizados para resolver algumas dessas pendências como, por exemplo, mensagens de confirmação e input boxes.
Dessa forma, darei a aplicação como concluída e agora entraremos na parte que diz respeito ao "deployment" dela. Primeiro veremos neste artigo algumas opções de emuladores para Android. Em um próximo artigo aprenderemos a distribuir e depurar a aplicação em um dispositivo físico. Por fim, o último artigo da série será sobre a minha experiência com a publicação da aplicação na Google Play Store.
Opção 1: Visual Studio Emulator for Android
Se você está acompanhando essa série desde o início, você sabe bem que eu apanhei um bocado na hora de instalar as ferramentas de desenvolvimento Xamarin Android no meu computador. Quando eu finalmente consegui instalar tudo corretamente e fazer a aplicação compilar, tudo o que eu menos queria era iniciar uma outra batalha para fazer a aplicação funcionar em um emulador Android.
Por causa disso, eu procurei pelo emulador que seria mais fácil de instalar. Depois de pesquisar um pouco, acabei percebendo que esse seria o emulador da própria Microsoft, que é o famoso Visual Studio Emulator for Android. O meu pensamento na época foi: "esse emulador tem até 'Visual Studio' no nome, não é possível que ele não vá funcionar perfeitamente para desenvolver aplicações utilizando o Visual Studio". E eu realmente não tive problema nenhum, nem na instalação, nem na configuração.
Uma vez instalado, você consegue fazer o download e habilitar os dispositivos listados na interface:
Como você pode perceber na imagem acima, eu habilitei dois tipos de emuladores. Por trás dos panos, o "Visual Studio Emulator for Android" utiliza o Hyper-V, que é a ferramenta de virtualização (criação e execução de máquinas virtuais) da própria Microsoft, disponível nas edições "Pro", "Enterprise" ou "Education" do Windows (ou seja, ele não funciona caso você utilize a edição "Home" do Windows).
Dito isso, a primeira vez que nós iniciarmos um dispositivo, o Visual Studio Emulator for Android criará uma máquina virtual correspondente àquele dispositivo no Hyper-V:
Uma vez criado o dispositivo dentro das configurações do emulador, ele já aparecerá para ser escolhido quando nós quisermos rodar uma aplicação Android pelo Visual Studio. Tudo configurado direitinho pelo emulador:
Então, qual é a desvantagem do Visual Studio Emulator for Android? A principal delas é que ele parou no tempo! Se dermos uma olhada na lista de APIs dos dispositivos disponíveis, veremos que a maior versão é a Marshmallow (API 23):
No momento da escrita desse artigo, já temos muitos dispositivos rodando a versão Oreo (API 26 e 27) do Android e uma grande maioria já rodando a versão Nougat (API 24 e 25).
Enquanto isso, de acordo com uma mensagem publicada nesta thread dos fóruns da Xamarin, a Microsoft não está planejando adicionar imagens de dispositivos mais recentes:
Portanto, se você precisar testar as suas aplicações nas versões mais novas do Android, você precisará de algum outro tipo de emulador.
Opção 2: Android Emulator (oficial do SDK)
A primeira opção de emulador que eu resolvi testar depois do "Visual Studio Emulator for Android" foi o próprio emulador oficial, disponibilizado pelo SDK do Android. E como eu já tinha previsto, a instalação foi uma verdadeira batalha.
Primeiramente, eu abri o Android Emulator Manager, cliquei na opção para criar um novo dispositivo e escolhi uma configuração qualquer:
Como você pode perceber na imagem acima, a mensagem de erro diz que eu não tenho a imagem para aquele dispositivo. OK, depois de pesquisar um pouco eu encontrei esta thread no StackOverflow e descobri que eu tinha que baixar a imagem correspondente à API que eu estava querendo utilizar. Isso pode ser feito através do Android SDK Manager:
Observe que existem inúmeras opções de imagens que podem ser baixadas. As que dizem respeito a dispositivos móveis (celulares e tablets) são as que começam com "Google Play" e "Google APIs". A diferença entre elas é que uma vem com a Google Play instalada (possibilitando que você baixe aplicativos da loja) e a outra não. Porém, pelo que eu li a respeito, se utilizarmos a imagem com a Google Play, fica mais difícil de depurar as nossas aplicações no emulador. Portanto, eu resolvi baixar a imagem que começa com "Google APIs", que não vem com a Google Play instalada.
Continuando a saga da criação do emulador utilizando o SDK do Android, depois de baixar a imagem pelo Android SDK Manager, eu consegui criar o emulador corretamente. Porém, ao tentar inicia-lo recebi a seguinte mensagem de erro:
Conforme a mensagem de erro indica, o emulador do Android precisa de acesso ao esquema de "hardware acceleration" do processador e, quando o Hyper-V está instalado no computador, ele suga toda essa funcionalidade para ele próprio. Uma opção para contornarmos esse problema seria desativarmos completamente o Hyper-V nas configurações do Windows, porém, se fizermos isso nós perderemos todas as máquinas virtuais que já tiverem sido criadas com ele (inclusive os emuladores criados com o Visual Studio Emulator for Android). Uma alternativa um pouco melhor é desativar temporariamente o Hyper-V utilizando o comando indicado na mensagem de erro:
Depois de executarmos esse comando, temos que reiniciar o computador. Quando você acabar de utilizar o emulador do Android e quiser habilitar o Hyper-V novamente, você precisará utilizar o seguinte comando (seguido de uma reinicialização):
Você encontra mais informações desse processo nesta thread do StackOverflow.
Enfim, uma vez executado o comando e reinicializado o computador, tentei iniciar o emulador novamente e recebi o seguinte erro:
Estranhamente, ao abrir o Android SDK Manager para tentar instalar o tal do "Intel HAXM", ele estava indicando que era incompatível com o Windows (!?):
Depois de pesquisar um pouco, encontrei esta outra thread do StackOverflow, com instruções para baixar e instalar o HAXM manualmente. Segui as instruções apresentadas na thread e finalmente consegui iniciar o emulador.
Porém, para o meu desespero, ele só estava exibindo uma tela preta (ou seja, o Android não iniciava). Pesquisei sobre esse outro problema e encontrei duas possíveis soluções (links aqui e aqui). A primeira sugestão foi marcar a opção "Use Host GPU" nas configurações do dispositivo:
A segunda sugestão foi habilitar a opção "Wipe user data" na hora de iniciar o emulador:
Entretanto, nenhuma dessas duas sugestões resolveram o meu problema. Pensei em desistir, mas resolvi tentar criar um outro dispositivo, utilizando outro API level. A configuração dele ficou assim:
Uma vez iniciado o emulador, o Visual Studio já reconheceu e exibiu o dispositivo na lista do botão de depuração:
Dei uma brincada com esse emulador e tive a impressão que ele é bem rápido. Diria até que ele é mais performático que o próprio "Visual Studio Emulator for Android" que eu tinha testado anteriormente.
Opção 3: Genymotion
O próximo emulador que eu testei foi o Genymotion, que é o emulador Android mais conhecido para desenvolvedores. Para baixa-lo e utiliza-lo, você precisa fazer uma conta no site deles. Existe uma versão gratuita para uso pessoal, mas tenha em mente que a sua licença proíbe qualquer utilização para uso comercial. Ou seja, se você estiver desenvolvendo uma aplicação que vai gerar receita (nem que seja com propaganda), você estará desrespeitando a licença. Nesse caso, você teria que adquirir uma licença paga que, no momento da escrita deste artigo, está saindo 99€ por ano para desenvolvedores independentes.
Uma vez criada a conta e feito o download, o processo de instalação é muito simples. O Genymotion é baseado no VirtualBox (outra ferramenta de virtualização, semelhante ao Hyper-V), portanto, caso você ainda não tenha o VirtualBox instalado, você tem a opção de baixa-lo em conjunto com o Genymotion. Caso você opte por instalar o VirtualBox separadamente (como eu optei fazer), atente-se para este link contendo as versões do VirtualBox compatíveis com o Genymotion para cada versão do sistema operacional.
Com o Genymotion instalado, você consegue criar dispositivos utilizando os templates disponíveis. Por exemplo, eu criei um dispositivo Samsung Galaxy S4 (API 19):
Ao iniciarmos o emulador, ele será adicionado automaticamente na nossa lista de dispositivos no Visual Studio:
A minha experiência com o Genymotion foi a mais tranquila de todas. A instalação foi super-rápida e o emulador tem uma performance excelente. Porém, além do detalhe da licença que eu mencionei anteriormente, algumas funcionalidades não estão disponíveis na versão gratuita:
Mas, de qualquer forma vale a pena testar o Genymotion para ter uma ideia do seu funcionamento e performance.
Não consegui fazer o Nox Player funcionar
Um outro emulador bem conhecido no mercado é o Nox Player. Porém, esse emulador é mais voltado para a instalação de aplicações ou jogos, e não para o desenvolvimento de aplicativos. Eu consegui instalá-lo e executa-lo com sucesso:
Porém, ele obviamente não apareceu na lista do Visual Studio. Depois de seguir um tutorial mostrando como fazer para que o Nox Player seja exibido no Android Studio (que supostamente funcionaria também para o Visual Studio), eu recebi uma mensagem de erro e acabei desistindo:
Se você já tiver conseguido fazer o Nox Player funcionar em conjunto com o Visual Studio para depurar aplicações Xamarin, por favor, deixe detalhes nos comentários no final do artigo.
E se eu já estiver em uma máquina virtual?
Uma grande dificuldade que podemos ter ao tentarmos utilizar esses emuladores é que eles dependem de ferramentas de virtualização (Hyper-V ou VirtualBox, por exemplo). Quando nós já estamos em uma máquina virtual, essas ferramentas de virtualização não podem ser utilizadas. Ou seja, não dá para utilizar uma máquina virtual dentro de outra. Por causa disso, eu não encontrei uma maneira de utilizar esses emuladores dentro de máquinas virtuais. Se você já tiver conseguido realizar essa façanha, por favor, dê o passo-a-passo para a gente nos comentários no final do artigo.
E o Xamarin Live Player?
Um outro esquema de depuração que está ficando bastante conhecido no mundo Xamarin é o Xamarin Live Player. Porém, ele não é um emulador, mas sim, uma possibilidade de depurarmos aplicações em dispositivos físicos mais facilmente. Vou deixar esse tema para o próximo artigo, onde falarei sobre depuração em dispositivos físicos.
Hoje em dia, o leque de opções de emuladores Android que temos à nossa disposição para testarmos aplicações desenvolvidas nessa plataforma melhorou muito se compararmos com o cenário de alguns anos atrás. A performance do emulador oficial do Android SDK está bem satisfatória. Além disso, temos também o "Visual Studio Emulator for Android" e o famoso Genymotion como alternativas ao emulador oficial.
Depois de testar todas essas opções, eu acredito que vou acabar ficando com o Genymotion para aplicações não comerciais (como é o caso da aplicação que foi desenvolvida nesta série). Já para aplicações comerciais (ou caso eu encontre alguma funcionalidade que realmente faça falta na versão gratuita do Genymotion), eu utilizarei o emulador oficial do Android SDK. Como última opção, nós temos ainda o "Visual Studio Emulator for Android", que me atendeu bem durante o desenvolvimento dessa série, mas que não está recebendo mais atualizações, portanto, vou evitar utilizá-lo.
E você, qual emulador você utiliza para desenvolver as suas aplicações? Você usa algum desses três que eu apresentei, ou até mesmo algum outro emulador? Fico aguardando os seus comentários logo abaixo!
Recolhendo todas as regions no Visual Studio 2017 Configurando o DateTimePicker para escolher um mês