Eu me consideraria muito bem versado em c #. É a minha língua preferida no momento e é onde basicamente reside toda a minha experiência profissional.
Ainda assim, estou intrigado com a existência do projeto MonoDroid . Meu entendimento sempre foi que C # e Java são muito próximos. Por exemplo, se você conhece um, pode aprender o outro rapidamente. Então, como eu considerei desenvolver meu primeiro aplicativo para Android, presumi que me familiarizaria com o Java o suficiente para começar e, em seguida, apenas aprender.
Isso não faria mais sentido do que usar o MonoDroid, que provavelmente é menos rico em recursos do que o Java Android SDK e requer aprendizado de sua própria API (embora uma API .NET)? Eu apenas sinto que seria melhor aprender um novo idioma (e um extremamente popular nesse sentido) e obter alguma experiência nele - quando é tão próximo do que você já sabe de qualquer maneira - em vez de usar a tecnologia que você possui com, sem adquirir habilidades mais valiosas.
Talvez eu esteja deturpando grosseiramente o potencial usuário médio do MonoDroid. Talvez seja mais para pessoas com experiência em Java e .NET e que preferem o .NET. Ou talvez (na verdade, é provável) haja outros fatores que simplesmente não considerei. Só estou pensando, por que você usaria o MonoDroid em vez de apenas desenvolver para Android usando Java?
Respostas:
Qualquer programador C # competente deve conseguir rapidamente o Java suficiente para escrever um programa Android, mas esse não é o ponto . É uma questão de reutilização de código.
Pense daqui a seis meses, quando seu programa Android for popular e seus usuários solicitarem uma versão para iPhone e Windows Phone 7. Se você usou o MonoDroid, poderá reutilizar a maior parte da lógica de seu aplicativo com o MonoTouch (Mono para iOS) e o Windows Phone SDK. Agora, eles querem uma versão baseada na Web, para incluir as mesmas bibliotecas de classes em um projeto ASP.Net. Versões de desktop? Não tem problema, essa mesma biblioteca de classes funciona com .Net no Windows ou Mono no Linux e OS X.
Além de C ou C ++, não consigo pensar em nenhuma outra linguagem que permita reutilizar o mesmo código em todos esses destinos.
Edite para abordar algumas preocupações nos comentários: .Net e Mono não permitirão que você escreva um programa completo e use o mesmo programa em qualquer lugar. Eles permitem que você compartilhe algum código e, como toda programação de plataforma cruzada, a quantidade de código compartilhado depende do tipo de programa que você está escrevendo e de quão bem você separa a interface do usuário e o código de hardware da lógica do aplicativo.
No entanto, se você escrever seu aplicativo Android em Java, quanto disso é reutilizável no iOS ou no Windows Phone? Esse é o ponto que eu estava tentando enfatizar. Eu tinha bibliotecas C # existentes que estavam trabalhando no Mono para Android em muito menos tempo do que seria necessário para reimplementá-las, mesmo que eu já conhecesse Java . Eu tenho algum código que é compartilhado - não modificado - entre um site, programas de desktop e aplicativos móveis em duas plataformas móveis diferentes, graças ao Mono.
Não pretendia sugerir, nem indiretamente, que o Mono fosse a ferramenta perfeita para todas as situações de desenvolvimento móvel. É uma troca, mas acredito firmemente que há situações em que o Mono é uma escolha muito melhor.
Por favor, veja (e vote!) A resposta de Jason S para outra perspectiva.
fonte
Esse é um tipo de resposta suplementar, já que uma coisa que parece ter sido negligenciada nas respostas até agora diz respeito ao que é realmente multiplataforma. De acordo com o próprio Xamarin, essa é basicamente sua lógica comercial, não sua interface do usuário ou qualquer controle de hardware, como GPS, áudio, catálogo de endereços etc. Esses terão que ser escritos especificamente para cada plataforma. Veja a entrada de perguntas frequentes. Tenho um aplicativo MonoTouch ou WindowsPhone 7. Posso apenas reconstruí-lo com o Mono para Android e segmentar o Android? .
Usando o Mono, você pode escrever sua interface do usuário e o código de controle do telefone usando C #, mas não será portátil em nenhuma plataforma. Você precisará escrever a interface do usuário e o controle do telefone para cada plataforma, mesmo que você possa escrevê-lo em C #. De qualquer forma, você ainda precisará aprender as especificidades dos controles de interface do usuário no Android e como o Android lida com os recursos do telefone.
Usando o Mono, você precisará aprender a API Mono, que chama a API do Android. Você também terá que esperar o Mono implementar novos recursos do Android e esperar que eles implementem todos os recursos do Android. Mesmo se o C # for mais poderoso que o Java, você não poderá fazer mais do que se usar o Android SDK diretamente (em Java).
Se você vai diretamente do C # para o Android, como o C # é tão sintaticamente semelhante ao Java, a maior parte do aprendizado de um desenvolvedor de C # para Android aprenderá a API do Android.
Algumas considerações ...
C # para Android
Precisa aprender
Não precisa aprender
Outras considerações
C # para Mono
Precisa aprender
Não precisa aprender
Outras considerações
fonte
Learn the Mono API
? Quanto você realmente precisa saber para desenvolver um aplicativo Android? E você realmente tentou o MonoDroid ou está adivinhando?Learn the Mono API
, quero dizer que você ainda precisa aprender a API do Android que o Mono replica, além das partes que não. Quanto você precisa saber? Depende do aplicativo, depende da pessoa - essa não era a essência do OP. Eu usei o MonoDroid? Não. Eu tenho experiência em C #, Java e Objective C, então não há necessidade. Eu considerei o Mono para portabilidade. Na época em que respondi, ninguém havia mencionado os limites da portabilidade. Não me importo de as pessoas discordarem de mim, mas isso por si só não torna minha resposta ruim.Eu acho que muito disso tem a ver com os recursos disponíveis.
A sintaxe em C # e Java pode ser semelhante, mas eles oferecem coisas muito diferentes. Por exemplo, trabalhar com datas usando bibliotecas Java padrão é um pesadelo, enquanto em C # é bastante agradável.
fonte
Parece uma ótima oportunidade para aprender um novo idioma , que eu acho que você não deve deixar passar.
Ir de C # para Java é fácil, pois eles são baseados nos mesmos conceitos. Java é como um subconjunto de C #, então você terá que desaprender algumas coisas (como propriedades e montagens) e se acostumar com algumas novas convenções, mas principalmente deve ser um acéfalo.
fonte
Lição de história rápida - o MonoDroid cresceu a partir do MonoTouch. Fez muito sentido na época. Infelizmente, a Novell foi vendida e toda a equipe Mono foi demitida. A boa notícia é que Miguel de Icaza garantiu financiamento e iniciou uma nova equipe para reconstruir o que era o MonoTouch / MonoDroid. Então você está no limbo até que eles realmente sejam lançados.
Atualização de julho de 2011: A roupa de Miguel recuperou os direitos de toda a pilha Mono *. Obtenha enquanto está hawt.
fonte