Últimamente estamos hablando bastante sobre programación nativa (Aprende Android en 20 conceptos) o alternativas a ésta, tales como Xamarin, opción para programar en C#/.NET recientemente actualizada a su versión 3.

Hoy es el turno del lenguaje de programación Ruby, y es que RubyMotion ha anunciado que en su próxima versión 3.0 habrá soporte para Android por primera vez. Hasta ahora consistía en una plataforma para desarrollar aplicaciones en Ruby para iOS y OS X. Dicha actualización estará disponible a lo largo del presente año.

Pero, ¿qué nos ofrecerá esta versión de RubyMotion? Básicamente la oportunidad de escribir aplicaciones Android completamente en Ruby en lugar de Java.  Además, prometen que habrá código reutilizable al portar una aplicación que ya tuviéramos hecha con RubyMotion para iOS o OS X. De nuevo, como ocurría en otras como Xamarin, habrá lógica de código que podremos dejar común, pero otra que será específica de la plataforma para la que estemos haciendo la aplicación.

Fase de creación de un proyecto para Android con RubyMotion

La gestión de proyectos Android será igual a la que se sigue para proyectos para iOS/OS X: bastará utilizar el argumento -template=android para crear el nuevo proyecto para Android, tal como en el ejemplo a continuación:

La plataforma nos proveerá un sistema de construcción basado en tareas Rake (recayendo la configuración del proyecto sobre Rakefile, en el cual se basará la creación del archivo AndroidManifest), similar a las otras plataformas.  Además, podremos ejecutar aplicaciones en el emulador de Android, en nuestro dispositivo Android conectado por USB, así como firmar la aplicación para su publicación en Google Play. Y todo ello, sin la necesidad de pasar ni por eclipse ni por Android Studio.

En cuanto a la generación del fichero Rdonde localizamos todos nuestros recursos en Android, el sistema se encargará de generar dicho fichero incluyendo todo lo que tengamos en los directorios resources assets.

En el caso de que necesitemos utilizar librerías de terceros, podremos hacerlo igual que se hace para iOS/OS X, mediante librerías vendor. Por ejemplo, para utilizar un MapView necesitaremos la librería de Google Play Services (mediante app.vendor_project). 

Fase de compilación

La compilación se basa en un compilador estático basado en LLVM, el cual transformará los ficheros Ruby en código de máquina ARM. Este código generado utilizará JNI para poder ser insertado en el código de ejecución de Java. El compilador además emitirá:

  • Código DEX Byte para las interfaces de clases, ya que Android no permite que las clases sean creadas en tiempo de ejecución
  • Metadatos DWARF, que nos ayuda en temas de excepciones simbólicas y en el caso de que queramos depurar el código

Todos los ficheros generados se generarán en una librería compartida NDK.

Finalmente, todo deriva un fichero .APK, del mismo modo que cuando lo hacemos de forma nativa. El peso de la aplicación será de 500KB por defecto y la velocidad al abrir esta aplicación será equivalente a las aplicaciones nativas, ya que el código no tiene que ser reinterpretado.

Fase de ejecución

Cuando vamos a ejecutar la aplicación para Android que hemos construido con RubyMotion, dispondremos de una máquina especialmente diseñada para Android, la cual, entre otras cosas, ignorará el código Ruby para la máquina de ejecución de Objective-C (iOS/OS X). Este modelo nos permitirá que las clases, objetos, métodos y excepciones de Ruby se conviertan en equivalentes en Java y viceversa. Por ejemplo:

  • Fixnum en Ruby será java.lang.Integer en Java
  • String en Ruby será java.lang.CharSequence en Java

Esto deriva en un buen rendimiento, ya que el código no necesita intermediarios. La gestión de memoria es delegada en el colector de basura Dalvik, el cual es bastante eficiente.

Para la ejecución, se utilizará el proyecto RubySpec para asegurarse que la ejecución es como se espera:

Ejemplos

Como el soporte para Android de RubyMotion es nuevo, se han preocupado de facilitarnos código de ejemplo, así como de una aplicación que está en Google Play, la cual será utilizada en conferencias y cuyo código estará disponible en GitHub.

Código de ejemplo en GitHub

Fase beta

Desde RubyMotion confirman que al ser tan nuevo el soporte para Android, la versión 3.0 no está totalmente depurada, por lo que nos incitan a que ayudemos a hacerla lo más estable posible. Para ello, necesitan tanto las pruebas internas que ellos han realizado como nuestra propia opinión y experiencia, como desarrolladores. Para ello, RubyMotion va a abrir a principios de Julio una versión beta cerrada para todo aquel que esté interesado. Si estás interesado, deberás rellenar el siguiente formulario.

Y tú, ¿estás interesado?