Como desarrollador de Móvil con 3 años de experiencia, les quiero compartir mi experiencia haciendo un resumen de los pros y contras de cada tecnología, solo hablare de las más extendidas, las de nicho como Ruby no las tocare, tampoco la de Unit 3D porque eso es para juegos y todavía no he trabajado con eso.
.
Nativo:
.
Las opciones nativas, utilizan XML para las interfaces, y la maquina de Java (JVM) para el código fuente, estas opciones tiene mas soporte con el hardware y tienen mejor rendimiento que cualquier opción híbrida.
.
El problema con estas opciones, es que vas a terminar manteniendo 2 o más proyectos que virtualmente son el mismo en distintos lenguajes, lo cual supone un gasto energético y de tiempo bastante elevado.
.
Java: este es el lenguaje que más tiempo a estado en el desarrollo de Android, y donde encontraras prácticamente toda la documentación oficial tanto vieja como nueva, su comunidad sigue siendo enorme y hay muchísimas librerías para ella.
.
Kotlin: este es el mejor lenguaje para programar nativo, es bastante más compacto que Java, tiene total compatibilidad con Java, por lo que lo puedes usar junto con Java para ir migrando poco a poco tu código, y por sobre todas las cosas no sufrirás por los nulos, (los nulos fueron el 70% de las causas de las caídas de los aplicativos de mi empresa, es un problema mas serio del que puedes llegar a imaginar)
.
Opciones Híbridas:
.
Simplemente no te metas ahí, no lo hagas, perderás tu tiempo, tu tiempo es mucho más valioso, aquí básicamente utilizan un Web View para encapsular código de javascript, html y css, es una perdida de tiempo total, mal performance y muchas limitantes.
.
Si aun así quieres usar Javascript, te recomiendo React Native o ionic, no uses las opciones híbridas si valoras tu tiempo.
.
Opciones Bridge:
.
Bueno aquí tenemos 4 opciones Flutter, ionic, React Native y Xamarin, de estas no he probado ionic, así que no podre hablar mucho de esa.
.
Estas opciones si bien tienen un performance aceptable las aplicaciones nativas le siguen ganando en este aspecto, pero tienes la ventaja de que te ahorras bastante tiempo
.
React Native: Si te gusta React o simplemente javascript, esta opción probablemente sea de las mejores, ya que es javascript es probable que toda tu empresa pueda apoyar en el proyecto (Javascript es el lenguaje más usado en el mundo)
.
Una ventaja importante, es que siempre podrás usar código y controles nativos, así que no tendrás que preocuparte porque algo no salga para React Native.
.
El principal problema es que ahora mismo no se cuenta con multihilo (hay algunas librerías pero no funcionan del todo bien), así que para cosas pesadas tendrás que usar código nativo.
.
Xamarin: Si usas C#, esta es la opción más rápida, desarrollar en xamarin no es mala idea, tiene mucha historia y un soporte muy robusto de parte de Microsoft, prácticamente todo lo que hay en nativo sale para Xamarin al poco tiempo.
.
Mi problema con Xamarin es que dependes del soporte de la comunidad, si tienes un proyecto sencillo y que haga cosas comunes no tendrás problemas, pero en mi caso yo soy de experimentar siempre con las nuevas cosas que traen Google y Apple, de andar haciendo experimentos y Xamarin no me da esa libertad.
.
Tengo miedo de Xamarin, porque no me da acceso al código nativo, sino a una representación abstracta del mismo escrita en C#, asi que por eso no lo uso, no quiero sorpresas raras en un proyecto de años de trabajo.
.
Pero si no eres tan errático como yo y simplemente quieres hacer un aplicativo solido sin tanta experimentación es totalmente funcional. De hecho creo que es la opción Bridge más solida a día de hoy.
.
Flutter: Bueno esta es la opción con el mejor rendimiento ya que tiene un enfoque distinto al resto de las opciones Bridge, es posible que para ciertas interfaces gráficas sea incluso más rápido que las nativas, así de poderoso es su enfoque.
.
Problema, al igual que pasa con React Native, no tenemos multi hilo propiamente dicho, tienen una cosa rara al igual que React Native pero ya les digo que si van a hacer procesos pesados, no sera buena idea hacerlo en Flutter. Así que muy probablemente termines usando código nativo para los procesos más pesados.
.
Al igual que con React Native, tienes total acceso al código nativo, pero con un pequeño problema, si bien es más rápido que React Native, no utiliza el XML (o los .xib/.storyboard en iOS), así que dependerás de los widges que haga Google y su comunidad, no tendrás acceso a todas las opciones nativas nada más salgan, algunas puede que nunca tengas acceso, por ejemplo con el touch 3D de Apple, no sé si ya hay soporte, pero si sé que durante mucho tiempo esto simplemente no se podía hacer.
.
Así que para aplicativos más experimentales optaría por React Native, pero para aplicativos que requieran mejor rendimiento me inclinaría por Flutter.
.
Conclusiones y Una opción complementaria:
.
Bueno si vieron las opciones Bridge de React Native y Flutter, son buenas para unificar interfaces gráficas, pero para código complejo y procesos pesados falla, hay se puede crear librerías comunes con tecnologías como Kotlin Multiplatform, esto sin duda es mucho más trabajo de configuración, y tiene muy poca documentación, pero se puede realizar, de hecho es la opción por la que me estoy decantando a día de hoy.
.
Sin embargo Xamarin no tiene este problema, así que considero que es la opción mas solida a día de hoy, dependerás de Microsoft, pero hay mucha documentación y es muy solida la tecnología. Si no la uso porque soy errático y no me quedo a gusto si no puedo tener el código nativo a mi disposición (me gusta hacer cosas raras).
…
Por ultimo decirte que si aspiras a realizar aplicaciones grandes de peso, es mejor que hagas proyectos Bridge a los nativos, ya que mantener 2 proyectos es excesivamente costoso, sacrificas un poco de performance para mantener todos tus recursos enfocados en tener aplicativos sólidos y bien testeados.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.