Bom, falar primeiro da parte chata, licenciamento :
Comparado com Android Studio (USD 0), o Xamarin é caro. Começa em USD 25 por plataforma, então pra desenvolver pra iOS e Android custa USD 50 por mês.
Se quiser usar o Visual Studio, as coisas ficam piores. O custo mensal vai pra quase 200 dólares, entretanto, existe uma forma de contornar valor exorbitante (pelo menos pra freelancers / empreendedores / pequenas empresas), explicados em http://adventuresinxamarinforms.com/2014/11/14/how-to-use-xamarin-forms-with-visual-studio-without-the-business-edition/ .
Outro ponto importante (e off-topic) é que o desenvolvimento pra Windows Phone só pode ser feito no Visual Studio no Windows, e compilar /debugar no iOS precisa de uma máquina rodando OS X, então não é uma forma de desenvolver pra iOS exclusivamente usando Windows.
Parece que com o anúncio do Visual Studio Community Edition a Xamarin começou a repensar nesses preços, e deve anunciar algo perto da Build 2015 (evento de desenvolvedores Microsoft, tipo Google Developer Days, WWDC).
Agora, voltando a parte técnica e minha experiência com Xamarin :
É importante ressaltar que existe um projeto principal e um subprojeto com customizações pra cada plataforma. Tudo em C#. Existe um "repositório" de código, estilo maven / gradle, chamado nuget que pode ser usado pra importar bibliotecas, como Google Play Services, Analytics, etc.
No projeto (infelizmente ainda não foi publicado, mas quando for eu adiciono nessa thread) usamos Xamarin Forms (http://xamarin.com/forms), que é uma "camada" pra desenhar a UI. Diferentemente de soluções por aí, a UI desenhada é nativa, ou seja, você realmente tem os EditTexts, TextEdits, ListViews, etc., incluindo possibilidade de usar temas / estilos com os style.xml que estamos acostumados. Inclusive, caso algum componente não te satisfaça de alguma forma, é possível criar uma camada "independente" (no projeto principal) e customizar aparência dentro do subprojeto da plataforma (fizemos isso pra alguns componentes, então realmente funciona). É uma solução interessante pro problema de reaproveitar código de UI, mas tem seus problemas, sendo o principal deles a falta de suporte a Fragments.
Vale lembrar que nada te impede de evitar Forms e fazer toda a UI usando os arquivos XML de Android, exceto que a reutilização de código de UI fica bem reduzida.
Na parte de controllers e models, um pouco de conhecimento de engenharia de software e design patterns ajudaram bastante na reutilização de código entre as plataformas, já que não existe uma solução "pronta" pra isso. Existem Activities, Services, Intents, Handlers, ContentProviders pra quem gosta dessas classes, todas com todos os métodos convertidos pra C#, usando os padrões da linguagem (eg.: é base, não super, os nomes de métodos começam com a primeira letra em maíuscula, etc.). As poucas diferenças ficam na hora de usar classes anônimas, que quando possível são trocadas por lambdas/blocos/closures e a parte de "async programming" é feita com as palavras chaves async / await e Tasks. Nada de AsyncTask e outras estruturas pra threading, yay! (Não que eu odeie AsyncTask, mas é mais código que pode ser reaproveitado entre as plataformas)
Não sou conhecedor de C#, mas me disseram que tem como usar uma parte de LINQ com o SQLite, usei consultas "comuns" mesmo.
O restante de positivo são detalhes de C#, tipo declaração de variáveis, blocos, async / await, annotations (eg.: você marca a annotation de activity na classe, ele mantém sincronizado o AndroidManifest.xml).
Óbvio, nem tudo foi prefeito, tive problemas. Android aparentemente tem alguns problemas com debugging ainda no Android 5, algumas vezes eu era obrigado a remover todo o app já que o dispositivo mantinha de alguma forma um cache de algumas libs e tive que fazer algumas partes da UI de forma nativa (sem Forms), já que precisava usar Fragments. Tive também problemas diversos com Windows Phone e iOS, mas não vou detalhar aqui. Nenhum deles foi stoppper, sempre que não dava pra fazer de forma neutra, dava pra implementar de forma "nativa" pra fazer funcionar.
A performance é bem ok, não tenho reclamações. A UI do app até que tem suas animações e transições, todas fluidas e tal. Tenho impressão que oscila um pouco menos do que se fosse em Java puro, graças ao GC, mas não tive tempo de estudar muito isso.
O tamanho do aplicativo foi meio surpreendente, mas de forma negativa. Um app de 3MB no Windows Phone ficou com aproximadamente 7MB no iOS, mas com quase 20 no Android. Imagino que deva ser por causa de GCM e support libraries que tive que adicionar, mas a diferença é evidente mesmo assim.
Teve algo que não falei?
De resumo, a experiência foi um pouco assustadora no começo (eu nem tenho tanto conhecimento em C#), já que quase todos os bugs que peguei foram bem no começo do projeto, mas depois de passado esses problemas, a coisa até que fluiu bem. A linguagem é elegante, a IDE é honesta (uso OS X, só usei Visual Studio pra fazer a versão Windows Phone), o preço é meio salgado e valeu o aprendizado, principalmente pq to aprendendo Unity 3D também. Cliente ficou satisfeito, provavelmente vai pedir mais projetos assim (ele fazia em PhoneGap / Cordova, tadinho). Obviamente ainda prefiro fazer nativo, mas sei lá, Java 7 é meio "nhé" perto de Xtend e outras linguagens por aí.
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
0 comentários:
Postar um comentário