RaspiPhone

En esta ocasión el laboratorio que he montado tiene la finalidad de probar la compatibilidad del código (bytecodes) generado  por el compilador Jikes (http://jikes.sourceforge.net/). Jikes es una implementación libre de la especificación del lenguaje Java que genera bytecode acorde a la especificación de la máquina virtual de Java.

En vista de la gran implantación que están teniendo los procesadores ARM, voy a compilar con Jikes el código Java en mi iPhone 4 y ejecutarlo en mi Raspberry Pi.

Teniendo el iPhone 4 Jailbreaked, en el repositorio de Cydia está disponible tanto el compilador como una implementación ligera de la máquina virtual, basta instalar el paquete iPhone/Java y el paquete Jikes.

Por otro lado, en la Raspberry Pi utilizaré el OpenJDK para ejecutar la clase Java compilada en el iPhone.

Como dice el refrán, vale más una imágen que mil palabras, asi que aqui os dejo un video del experimento :

Una extensión de este laboratorio consiste en una prueba de compatibilidad del bytecode generado por el compilador Jikes en la máquina virtual  empleada por la plataforma Android (Dalvik).

Para ello es importante analizar el bytecode generado por dicho compilador, que no me voy a extender aqui en ello, pues, aunque no es objeto de este laboratorio, si que es importante mencionarlo, ya que el mero hecho de no declarar las clases públicas bajo el compilador Jikes provocará que no encuentre el punto de entrada la máquina virtual Dalvik.

Al lio. La manera más sencilla de comprobar si funciona dicho código en Dalvik es mediante el uso de Reflexión (Java Reflection); de este modo, se realizará una carga dinámica de la clase previamente compilada por Jikes en el iPhone.

La clase es muy sencilla, simplemente lleva un método público que se invoca desde el main como en el laboratorio inicial, y que ahora se invocará por reflexión. Dejo aqui el código de la clase.

public class Test
{

public String quienManda(){
return new String(“Skynet Rules”);
}
public static void main (String args[]){

Test skynet = new Test();
System.out.println(skynet.quienManda());
}
}

El proyecto Android es un proyecto sencillo, en el cual simplemente se hace la llamada al método por reflexión, como puede verse en la siguiente imágen :

Proyecto Android

Si se ejecuta en el emulador, puede observarse que funciona correctamente. De hecho, lo he testado en un Samsung Galaxy Mini con CyanoGenMod 7 y funciona.

Emulador Android 2.3

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: