Xamarin, la API para crear aplicaciones multiplataforma en C#/.NET
Hace tan sólo un par de semanas que terminamos la sección Aprende Android en 20 conceptos. Con esta sección, podemos empezar a meternos en el mundo de la programación Android, utilizando su kit de desarrollo nativo. Eso no quiere decir que no haya otras alternativas. Hoy vamos a hablar de una de ellas: Xamarin.
Xamarin, la API que nos permitirá olvidarnos de Java
Xamarin es una compañía que se estableció en mayo de 2011, por los mismos ingenieros que crearon el proyecto Mono, consistente en una implementación libre de la plataforma de desarrollo .NET para dispositivos Android, iOS y GNU/Linux. Es decir, con Xamarin podríamos evitar tener que utilizar Java para desarrollar una aplicación para Android. Anteriormente, este proyecto se llamaba MonoTouch y MonoDroid.
Desde mi punto de vista, el principal motivo para que surjan plataformas de este tipo radica en que uno de los mayores desafíos a la hora de desarrollar aplicaciones multiplataforma es mantener la consistencia en todos los entornos (en términos de desarrollo en paralelo de todas las plataformas, con unos tiempos y costes razonables).
Pero, ¿cuál es la idea que hay detrás de Xamarin? El concepto es sencillo: utilizar C# y .NET para la compilación de aplicaciones nativas para Android o iOS.
Ventajas
Xamarin nos permitirá generar nuestra aplicación para iOS (.APP) y para Android (.APK), la cual ya sí correrá de forma nativa. Gracias a esto, surge una de las grandes ventajas de Xamarin: la reutilización de código. En cualquier aplicación multiplataforma que hayamos desarrollado, hay módulos iOS que hemos tenido que portar a Java, o módulos Android que hemos tenido que portar a Objective-C.Pero en este caso, al desarrollar todas las plataformas en la misma tecnología, no es necesario reescribir el código, al poder reutilizar módulos ya implementados.
La cosa no queda ahí, pues al poder desarrollar aplicaciones nativas para Windows Phone, Windows 8 y web en C# y .NET, resulta que la reutilización del código la estamos exportando a aún más plataformas que iOS o Android. Según Xamarin, deberíamos poder reutilizar el 90% del código aproximadamente.
Otra de las ventajas de la plataforma es que dispone de tantas librerías de terceros como el código nativo: hay una gran comunidad detrás. Pero uno de los detalles más importantes es que Xamarin nos proporciona acceso total a la API estándar de Android.
Esto nos permite no estar limitados en funcionalidad por el hecho de utilizar Xamarin en lugar de Android nativo. ¿Hasta qué punto se parecen Xamarin y Android nativo? Lo mejor es ver un ejemplo a continuación muy sencillo, donde una actividad carga un layout. Veamos la versión nativa:
El código es muy sencillo pero sirve de ejemplo perfecto para el caso. Ahora veamos un código similar pero en Xamarin:
Este código hace exactamente lo mismo, pero además añade un escuchador a un botón que se encuentra en el layout principal. ¿No es totalmente similar?
Y esa es una de las ventajas que personalmente me gustaría destacar de Xamarin: aprender Xamarin implica aprender Android implícitamente y viceversa. ¿Por qué? Porque al final, la API que vamos a utilizar va a ser totalmente equivalente, ya sea en Java o en C#/.NET.
Inconvenientes
Todo esto suena genial, pero tampoco es todo tan sencillo o simple: no todo es magia. ¿Por qué decimos esto? Todo el código no será reutilizable y que reaprovechemos más o menos código dependerá de nuestras capacidades de desacoplar funcionalidad, pues todo el código relacionado con manejo de interfaces gráficas no será reutilizable. Por eso, es nuestra misión extraer de forma totalmente independiente toda la funcionalidad posible. Para conseguir esto, podemos utilizar técnicas como la inversión de control (IoC) para aumentar el código compartido. La pega es que si nuestra aplicación tiene mucho código relacionado con la interfaz gráfica, menos será el código que tenemos que reutilizar. Y es cierto que toda la lógica para la interfaz gráfica (gestión de eventos, escuchadores…) al final resulta ser bastante código.
Otro inconveniente es que cualquier aplicación en Xamarin ocupa más espacio que una nativa, afectando al tiempo de descarga y al almacenamiento. Hablamos de que mínimo ocupará unos cuantos megas y puede crecer proporcionalmente con el código si éste utiliza más características de la API. Esto se debe a cómo se ensambla el código desde .NET para lincarlo a código nativo. Esto también provoca, en el caso de Android, un retardo inicial al abrir la aplicación para el caso de Xamarin. Es cierto que la compañía trabaja en reducir todo esto y está consiguiendo avances, pero aún es remarcable.
Es cierto que hemos hablado de la gente detrás de Xamarin, de la comunidad que existe… Pero, ¿es comparable a lo que mueven compañías como Google (Android), Apple (iOS)…? Claro que no. La comunidad de Xamarin, comparada con las grandes, es pequeña, y eso puede provocar también que nos cueste más trabajo encontrar algo específico o directamente no esté.
Pero personalmente, creo que el mayor inconveniente de Xamarin es precisamente una de sus ventajas. Antes comentábamos que aprender Xamarin implica aprender Android, por el tema de gestionar las interfaces gráficas. Pero esto nos lleva a que hacer una aplicación multiplataforma con Xamarin, al final sabremos cómo funciona la API de Android y la API de iOS. Entonces, ¿por qué no hacerlas nativas? ¿Sólo por esa parte de código no relativa a la interfaz? La curva de aprendizaje la vamos a tener que superar en ambas plataformas sí o sí.
Conclusiones
Personalmente, Xamarin es una opción más, la cual yo sólo consideraría seriamente en el caso de que necesitemos ahorrar algo de tiempo o dinero sí o sí. Pero no debemos llegar a engaños: cada plataforma que incluyamos en la compatibilidad nos llevará su tiempo y su curva de aprendizaje (si no conocíamos la API nativa). Además, resulta que al no ser nativo, las aplicaciones pesan algo más y no están tan optimizadas.
Pero quizá, por ejemplo, cuando alguien no entiende Objective-C, puede ser una solución, o incluso una solución temporal: primero aprendes los conceptos de la plataforma y luego te pasas al lenguaje en sí. En el caso de Android, .NET y Java son realmente parecidos, por lo que nos resultará muy fácil pasar de una a otra.
Y tú, ¿te animas a probar? Para todo el que se iniciar en esta plataforma, aquí tiene la documentación oficial de Xamarin para Android.