Xamarin logo

Xamarin é uma ferramenta incrível que te permite criar aplicativos para iOS, Android, Windows Phone e muito mais, compartilhando código C#, focado em produtividade. Agora que Xamarin é grátis, muita gente está buscando conhecimento e começando a se aventurar no assunto, o primeiro passo então é configurar um ambiente para Xamarin, mas nem sempre essa configuração sai como planejada, o que pode ser bem frustrante pra quem está começando. Aqui na Lambda3 temos entregado projetos Xamarin há alguns anos e já passamos por muitos desses problemas, o que nos rendeu algumas experiências que podemos compartilhar.

Eu encaixaria Xamarin na terceira lei de Clarke:

Qualquer tecnologia suficientemente avançada é indistinguível de magia.

Aqui no blog da Lambda3 temos guias para configurar o Xamarin no Windows e no Mac, porém muita coisa pode dar errado quando você configura Xamarin pela primeira vez, e as mensagens de erro nem sempre são tão claras, talvez pelo motivo acima. Pensando nisso resolvi fazer o “O guia para solucionar erros de configuração de Xamarin que você estava procurando”. Vou catalogar os erros mais comuns que acontecem e como solucioná-los nesse post, para tentar ajudar novos aventureiros no mundo do Xamarin! Se você tiver problemas que não estão catalogados nesse post, poste nos comentários e tentaremos te ajudar! Vale lembrar que reiniciar o Visual Studio ou sua máquina é sempre uma boa tentativa para solucionar alguns problemas também :).

Meu aplicativo builda mas não faz deploy!

Eu aperto F5, olho na janela de Output, meu projeto builda com sucesso, eu fico feliz, mas nada acontece depois disso, por algum motivo o aplicativo não está sendo enviado para o meu celular ou emulador.

Esse é fácil de solucionar, precisamos nos certificar de que o projeto está marcado para Deploy nas configurações da sua Solution. É muito comum isso acontecer quando o projeto é criado pelo Xamarin Studio.

Clique nas propriedades da sua Solution, vá em “Configuration Properties” e marque a caixinha de “Deploy” dos projetos que pretende rodar, conforme a foto a seguir:

configuration properties

Agora o projeto será enviado para o seu celular/emulador.

Meu projeto Android falha com erro de “aapt.exe”

Passei por esse problema durante um projeto Xamarin aqui na Lambda3, enquanto configurava o servidor de build automatizado, que era compartilhado entre vários times que mexiam com Android. Da noite pro dia o projeto parou de buildar sem que eu tivesse mexido na configuração do ambiente.

O problema pode estar relacionado ao build-tools do Android. Essa é uma ferramenta do próprio Android, usada em vários passos durante a geração do nosso aplicativo, então é comum que isso aconteça quando já desenvolvemos para Android (sem Xamarin) ou quando tentamos manter tudo atualizado no Android SDK Manager.

O Xamarin tem problemas com algumas versões do “build-tools”, então precisamos ficar atentos para não instalar as versões incompatíveis. Podemos ver com detalhes todos os erros que podem acontecer aqui.

Para solucionar esse problema, desinstale o Android SDK Build-tools 24 do seu sistema. Para fazer isso, abra o Android SDK Manager, você pode abrir direto pelo Visual Studio ou pesquisando por “Android SDK Manager” no Windows:

android sdk manager

Na janela que abrirá, se o build-tools 24 estiver instalado, selecione-o e clique no botão “Delete Package“:

delete build-tools

Outro ponto importante, caso você esteja com build-tools mais recente que 24.0.1, você precisa ter o JDK 8 instalado.

Não consigo debugar no emulador Android, recebo a mensagem “could not connect to the debugger”

Esse caso acontece em específico se estivermos usando o Visual Studio Emulator for Android. Esse emulador utiliza o Hyper-V por baixo dos panos, e precisamos habilitar um modo de compatibilidade para que tudo funcione.

Abra o Gerenciador do Hyper-V na sua máquina:

gerenciador hyper-v

Encontre o seu emulador na lista de máquinas criadas, clique com botão direito e vá em “Configurações“:

hyper-v emulador

Selecione Processador -> Compatibilidade, e marque o checkbox “Migrate to a physical computer with a different processor version”.

migreate processor

É possível que isso ainda não seja o suficiente e você precise desabilitar o “Fast deployment” da sua aplicação. Para fazer isso, vá nas Propriedades do seu projeto Android, selecione a opção “Android Options” e desmarque a caixa “Use Fast Deployment“. Só faça isso se você realmente continuar com problemas, porque desabilitar essa opção vai deixar o processo de debug mais lento.

fast deployment

Não consigo mais fazer deploy, recebo o erro “[INSTALL_FAILEDUPDATE_INCOMPATIBLE]”

Esse também é bem simples, isso ocorre quando alguma modificação faz o Xamarin se perder nas versões do nosso app, e ele para de sobrescrever o app que já está instalado no emulador ou aparelho.

Para resolver isso é só deletar o APK do seu aparelho. Por ser Android, a forma de fazer isso pode ser ligeiramente diferente de um aparelho pra outro, mas em geral você precisa ir nas Configurações do aparelho, navegar até o menu de Aplicativos, e mandar desinstalar por lá.

Meu projeto Xamarin.Forms/Android não builda com vários erros de Resource

Esse sintoma é bem chato porque às vezes não temos nenhuma mensagem de erro nos ajudando na real causa do problema. Normalmente temos apenas erros semelhantes a esses:

2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1290,119,1290,143): error CS0117: 'Resource.Styleable' does not contain a definition for 'SnackbarLayout_elevation'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1291,130,1291,165): error CS0117: 'Resource.Styleable' does not contain a definition for 'SnackbarLayout_maxActionInlineWidth'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1308,104,1308,113): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1309,118,1309,141): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout_tabBackground'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1310,120,1310,145): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout_tabContentStart'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1311,115,1311,135): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout_tabGravity'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1312,122,1312,149): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout_tabIndicatorColor'
2>d:\Documents\Visual Studio 2015\Projects\App4\App4\App4.Droid\Resources\Resource.Designer.cs(1313,123,1313,151): error CS0117: 'Resource.Styleable' does not contain a definition for 'TabLayout_tabIndicatorHeight'

Não desanime se existir mais de 100 erros semelhantes a esses. Todos são causados por um único problema, e assim que você solucionar isso todos vão sumir.

Esses problemas acontecem quando usamos os NuGets de Android Support Library do Android. Basicamente todos apps com Material Design acabam usando isso para conseguir dar suporte a aparelhos mais antigos. No momento do Build o Xamarin precisa baixar as implementações nativas, já que suas DLLs só fazem os bindings para essas bibliotecas. Esses downloads são bem grandes, e acontecem apenas na primeira vez que usamos uma nova versão das bibliotecas de suporte, por isso podem demorar bastante. Se a internet oscilar ou o build for cancelado na metade, o Xamarin pode ficar com pacotes corrompidos, que ele não vai mais conseguir apagá-los, à partir daí, todo build falhará pela existência desses pacotes corrompidos.

Para solucionar isso precisamos apagar os pacotes corrompidos para que o Xamarin reinicie o download no momento do Build. Esses pacotes ficam no caminho:

C:\Users\SEU_USUARIO\AppData\Local\Xamarin\zips

Basta apagar tudo que estiver lá dentro e esperar ele fazer o download novamente.

O Xamarin não acha o SDK instalado na minha máquina

sdks

Esse erro acontece quando já mexemos com Android previamente. Esse foi o mais frustrante pra mim quando quis migrar meu projeto para o Xamarin. O Visual Studio/Xamarin nem sempre consegue detectar que já temos um Android SDK instalado, então ele instala outro, em outra pasta. O problema é que agora temos SDKs duplicados, causando conflitos. Isso pode resultar em emuladores que sobem e conectam em portas que não são visíveis ao SDK que o Xamarin enxerga, ou simplesmente em erros no build do projeto como esse:

Error 1 Could not find android.jar for API Level 24. 
This means the Android SDK platform for API Level 24 is not installed. 
Either install it in the Android SDK Manager (Tools > Open Android SDK Manager...), or change your Xamarin.Android project to target an API version that is installed.

Primeiro vamos nos certificar de que temos o SDK correto instalado:

android sdk manager

sdk instalado

No caso já estamos com o SDK instalado corretamente, então agora é hora de garantir que o nosso sistema está apontando para o mesmo SDK que o Xamarin está enxergando.

Vamos pegar o caminho do SDK que o Xamarin está usando, nas opções do Visual Studio (Tools > Options), procure por Xamarin e copie o caminho do SDK:

xamarin sdk

Agora abra o editor de registro do Windows:regedit e vá até o caminho

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Android SDK Tools

PS.: Em algumas máquinas esse caminho pode estar apenas como “Android”.

Altere o Path para o caminho correto do SDK que o Xamarin enxerga.

regedit

Salve e reinicie a máquina, o erro deve sumir e o projeto deve buildar normalmente agora.

O processo de deploy fica preso com a mensagem “Emulator is already running”

Este erro se parece muito com o primeiro, mas também está relacionado com uma confusão entre duas pastas com mesmo SDK. O adb do SDK utilizado pelo emulador pode estar diferente do usado pelo Xamarin. Isso também está documentado na página de ajuda da Microsoft. Para solucioná-lo siga as mesmas instruções que expliquei aqui.

O projeto falha com a mensagem “Expecting class path separator ‘;’ before ‘\Android\android-sdk\build-tools\xx.0.x\lib\shrinkedAndroid.jar'”

Este problema acontece quando nosso aplicativo usa MultiDex, o processo de build do Android está com problemas para encontrar algumas ferramentas necessárias para finalizar o processo de criação do aplicativo, normalmente isso é causado porque há algum nome com [espaço] no caminho buscado.

No meu caso, o que aconteceu é que o SDK do Android estava instalado na pasta:

C:\Program Files\Android\android-sdk

Percebam que o problema é o Program Files, existe um caractere de espaço no nome.

Para solucionar isso precisamos mover o SDK de lugar para qualquer pasta que não contenham espaços no caminho, por exemplo, movi para “C:\Android\android-sdk”.

Feito isso seu projeto deve voltar a compilar.

Failure [INSTALL_FAILED_NO_MATCHING_ABIS]

Isso significa que seu projeto não foi compilado para uma versão com a mesma arquitetura do seu aparelho ou emulador. É bem comum isso acontecer com deploys em emuladores, pois um emulador roda uma imagem em cima do seu CPU que tem arquitetura x86 (ou x64), e o seu aparelho físico normalmente usa alguma arquitetura ARM. Você precisa habilitar essa arquitetura, e fazer isso é bem simples.

Vá nas opções do seu projeto Android, em seguida em Android Options. Vá nas opções avançadas, e agora escolha todas as arquiteturas necessárias, no meu caso, precisei habilitar a arquitetura x86_64:
android advanced options

Salve o projeto e recompile.

Lembre-se que cada arquitetura adicionada aumenta o tamanho do seu APK final. Utilize apenas as realmente necessárias.

The “DebugType” parameter is not supported by the “XamlCTask” task. Verify the parameter exists on the task, and it is a settable public instance property.

Esse erro tem ocorrido nas versões mais recentes do Xamarin.Forms, as versões antigas não possuem esse target, se você possuir uma Solution com versões mistas so Xamarin.Forms, provavelmente vai ter esse problema. A solução é bem simples: consolide as versões do Xamarin.Forms para utilizar sempre a mesma, em todos os projetos. A maneira mais fácil de fazer isso é no Visual Studio, no Windows, utilizando a opção “Manage NuGet Packages for Solution”, clicando com botão direito na Solution.

Consolide as versões e faça o rebuild do projeto.

Conclusão

Configurar o Xamarin pela primeira vez pode ser meio chato porque envolve muitas ferramentas trabalhando em conjunto, mas depois de configurado ela é uma das ferramentas mais produtivas para gerar aplicativos multiplataformas. Com esse guia espero que você não tenha mais as frustrações iniciais de começar com Xamarin.

Aqui na Lambda3 temos especialistas Xamarin entregando apps para todas as plataformas mobile (Android, iOS e Windows Phone). Fale com a gente se tiver alguma demanda!

Mahmoud Ali

Desenvolvedor de Software na Lambda3, Microsoft MVP, amante de um bom café ☕️ e uma boa cerveja 🍺.