Me consideraría bastante versado en C #. Es mi idioma de elección en este momento, y es donde básicamente reside toda mi experiencia profesional.
Aún así, estoy desconcertado por la existencia del proyecto MonoDroid . Siempre he entendido que C # y Java están muy cerca. Por ejemplo, si conoces uno, puedes aprender el otro muy rápido. Entonces, como he considerado desarrollar mi primera aplicación de Android, asumí que me familiarizaría con Java lo suficiente como para comenzar y luego aprendería sobre la marcha.
¿No tendría más sentido que usar MonoDroid, que probablemente tenga menos funciones que el SDK de Android de Java, y de todos modos requiere aprender su propia API (aunque sea una API .NET)? Siento que sería mejor aprender un nuevo idioma (y uno extremadamente popular) y obtener algo de experiencia en él, cuando esté tan cerca de lo que ya sabes de todos modos, en lugar de seguir con una tecnología que tienes experiencia con, sin adquirir más habilidades valiosas.
Tal vez estoy tergiversando groseramente al usuario potencial promedio de MonoDroid. Tal vez sea más para personas con experiencia en Java y .NET y que simplemente prefieren .NET. O tal vez (de hecho es probable) hay otros factores que simplemente no he considerado. Me pregunto, ¿por qué usarías MonoDroid en lugar de solo desarrollar para Android con Java?
Respuestas:
Cualquier programador competente de C # debería poder recoger rápidamente suficiente Java para escribir un programa de Android, pero ese no es el punto . Es una cuestión de reutilización de código.
Piense en seis meses a partir de ahora, cuando su programa de Android sea popular y sus usuarios soliciten una versión para iPhone y Windows Phone 7. Si hubiera utilizado MonoDroid, puede reutilizar la mayoría de la lógica de su aplicación con MonoTouch (Mono para iOS) y el SDK de Windows Phone. Ahora quieren una versión basada en la web, por lo que incluye las mismas bibliotecas de clases en un proyecto ASP.Net. Versiones de escritorio? No hay problema, esa misma biblioteca de clases funciona con .Net en Windows o Mono en Linux y OS X.
Aparte de C o C ++, no puedo pensar en ningún otro lenguaje que le permita reutilizar el mismo código en todos esos objetivos.
Edite para abordar algunas inquietudes en los comentarios: .Net y Mono no le permitirán escribir un programa completo y usar ese mismo programa en todas partes. Le permitirán compartir algo de código y, como toda programación multiplataforma, la cantidad de código compartido depende del tipo de programas que esté escribiendo y de qué tan bien separe la interfaz de usuario y el código de hardware de la lógica de la aplicación.
Sin embargo, si escribe su aplicación de Android en Java, ¿cuánto de eso es reutilizable en iOS o Windows Phone? Ese es el punto que estaba tratando de hacer. Tenía las bibliotecas C # existentes que funcionaban en Mono para Android en mucho menos tiempo del que me hubiera llevado implementarlas de nuevo, aunque ya conocía Java . Tengo un código que se comparte, sin modificar, entre un sitio web, programas de escritorio y aplicaciones móviles en dos plataformas móviles diferentes, gracias a Mono.
No quise dar a entender, ni siquiera indirectamente, que Mono era la herramienta perfecta para cada situación de desarrollo móvil. Es una compensación, pero creo firmemente que hay situaciones en las que Mono es una opción mucho mejor.
Por favor, vea (¡y vote!) La respuesta de Jason S para otra perspectiva.
fuente
Este es un tipo de respuesta complementaria, ya que una cosa que parece haberse pasado por alto en las respuestas hasta ahora, se refiere a lo que en realidad es multiplataforma. Según Xamarin, esa es básicamente su lógica de negocio, no su interfaz de usuario ni ningún control de hardware como GPS, audio, libreta de direcciones, etc. Deberán escribirse específicamente para cada plataforma. Consulte su entrada de preguntas frecuentes. Tengo una aplicación MonoTouch o WindowsPhone 7, ¿puedo reconstruirla con Mono para Android y apuntar a Android? .
Con Mono, puede escribir su UI y el código de control del teléfono usando C #, pero no será portátil en ninguna plataforma. Tendrá que escribir la interfaz de usuario y el control del teléfono para cada plataforma, aunque puede escribirlo en C #. De cualquier manera, aún tendrá que aprender los detalles de los controles de la interfaz de usuario en Android y cómo Android maneja los recursos del teléfono.
Con Mono, tendrá que aprender la API de Mono, que llama a la API de Android. También tendrá que esperar a que Mono implemente nuevas funciones de Android y esperar que implementen todas las funciones de Android. Incluso si C # es más poderoso que Java, no podrá hacer más que si usa el SDK de Android directamente (en Java).
Si va directamente de C # a Android, ya que C # es tan sintácticamente similar a Java, entonces la mayoría del aprendizaje de un desarrollador de C # para Android aprenderá la API de Android.
Algunas consideraciones ...
C # para Android
Necesitar aprender
No necesito aprender
Otras Consideraciones
C # a Mono
Necesitar aprender
No necesito aprender
Otras Consideraciones
fuente
Learn the Mono API
? ¿Cuánto necesitas saber para desarrollar una aplicación de Android? ¿Y realmente has probado MonoDroid o estás adivinando?Learn the Mono API
, quiero decir que todavía necesita aprender la API de Android que Mono replica, además de las partes que no. ¿Cuánto necesitas saber? Depende de la aplicación, depende de la persona, esa no era realmente la esencia del OP. ¿He usado MonoDroid? No. Tengo experiencia en C #, Java y Objective C, así que no es necesario. Considere Mono para la portabilidad. En el momento en que respondí, nadie había mencionado los límites de portabilidad. No me importa que las personas no estén de acuerdo conmigo, pero eso en sí mismo no hace que mi respuesta sea pobre.Creo que mucho tiene que ver con los recursos disponibles.
La sintaxis en C # y Java puede ser similar, pero ofrecen cosas muy diferentes. Por ejemplo, trabajar con fechas usando bibliotecas estándar de Java es una pesadilla, mientras que en C # es bastante agradable.
fuente
Parece una gran oportunidad para aprender un nuevo idioma , que no creo que debas dejar pasar.
Pasar de C # a Java es muy sencillo, ya que se basan en los mismos conceptos. Java es como un subconjunto de C #, por lo que tendrá que desaprender algunas cosas (como propiedades y ensamblajes) y acostumbrarse a algunas convenciones nuevas, pero sobre todo debería ser obvio.
fuente
Lección de historia rápida: MonoDroid surgió de MonoTouch. Tenía mucho sentido en ese momento. Desafortunadamente, Novell fue vendido y todo el equipo de Mono fue despedido. La buena noticia es que Miguel de Icaza obtuvo fondos y ha comenzado un nuevo equipo para reconstruir lo que era MonoTouch / MonoDroid. Así que estás en el limbo hasta que realmente se lancen.
Actualización de julio de 2011: el atuendo de Miguel ha recuperado los derechos de toda la pila Mono *. Consíguelo mientras está hawt.
fuente