2009-03-22 13 views
18

Dado que tanto la implementación java (OpenJDK) como la máquina virtual DalvikVM de Android son de código abierto, debe ser posible implementar JavaVM de Sun en la parte superior DalvikVM de Google. Esto haría posible ejecutar aplicaciones e idiomas basados ​​en JVM (Clojure, Jython) listos para usar en el Android.Ejecutando bytecode Java en Android - Sun JVM encima de DalvikVM

¿Existe un esfuerzo continuo para producir tal implementación de Sun JVM?

+0

¿Fuiste capaz de ejecutar bytecode java en el teléfono Android? si es así, ¿puedes enumerar los pasos? – inquisitive

Respuesta

13

El OpenJDK hace uso de un código nativo, por lo que sería un puerto no trivial ... hay al menos una VM (JikesRVM) escrita en Java, desafortunadamente no es una implementación completamente funcional de Java.

Dado que DalvikVM ejecuta clases que se convirtieron de archivos .class, debería ser posible convertir las clases. Entonces, el "único" problema es cuando los lenguajes generan bytecode sobre la marcha, para eso requeriría el paso adicional de convertir el bytecode generado al formato DalvikVM mientras el programa se ejecuta en el DalvikVM.

Hmmm ... una especie de JITT (Just In Time Translator) que codifica archivos de clase en un archivo DalvikVM en tiempo de ejecución en el teléfono. Me pregunto qué lento sería eso.

+0

hm. como ejecutar vista en un emu x86, dentro de un jvm, en 1995? :) – George

+0

todo lo viejo es nuevo otra vez :-) – TofuBeer

0

No creo que el problema sea técnico. En teoría, puede migrar OpenJDK al iPhone, por ejemplo, pero existen restricciones legales vigentes.

+0

Aquí está el acuerdo de licencia para Android: http://developer.android.com/sdk/download.html?v=android-sdk-windows-1.1_r1.zip. No veo ninguna barrera legal aquí. – George

+0

Además, el sistema operativo Android está bajo la licencia de Apache y GPL: http://source.android.com/license. Entonces, no hay restricción legal alguna. – George

9

Trasladar OpenJDK a la plataforma Android es posible. Hay esfuerzos como: Shark, Zero y caciocavallo que facilitan enormemente el proceso de puerto (= sin ASM, simple AWT par). Además, Android no es más que un kernel de Linux detrás. La única pregunta es cuándo lo hará alguien.

Por cierto, tanto los teléfonos iphones como los Android tienen un procesador Jazelle compatible, alguien con habilidades de pirateo de procesador muy fuertes sería muy bienvenido para agregar el soporte de Jazelle a OpenJDK. Al hacerlo, podríamos elegir entre: aceleración de recursos muy ligera (Jazelle) y JIT ;-)

Acerca de iPhone, es lo mismo: un puerto es posible. Solo Apple ha puesto una sección en la licencia de iPhone que claramente prohíbe el uso de VM. Según la ley europea, para mí, esta sección de licencia no es legal. Dos razones: no puede forzar/vincular la compra de dos de sus productos. Aquí sintonizo e Iphones están vinculados. No puede negarse a vender algo que puede vender. Aquí, tan pronto como se construya una máquina virtual para iPhone, si se niega a colocarla en la tienda iTune, se aplicará este punto. ¿Hay alguien que quiera desafiar la legalidad de la licencia de Apple en la tierra? No lo creo, las personas infelices volarán a Android o a cualquier otra plataforma.

1

técnicamente debería ser posible interpretar el código de byte de punto de acceso en dalvik vm o el código de byte de dalvik en el punto de acceso, pero nunca será eficiente (sin mencionar el diseño elegante) a largo plazo. el costo de hacerlo podría ser muy alto, especialmente con respecto al mantenimiento en la evolución futura de dicho ecosistema dividido.

Creo que, desde el principio, dalvik vm es una cuestión de control de potencia/mercado en lugar de un esfuerzo innovador para mejorar el ecosistema de máquina virtual de Java.dalvik vm y hotspot vm son dos puentes de carretera del lago a través de la construcción del mismo río en paralelo a cinco metros uno del otro. divide y trae confusión al ecosistema tecnológico de java.

google es, en mi opinión, definitivamente el líder tecnológico con contribuciones innovadoras en la última década que eclipsan el oráculo mucho más conservador, pero en este mismo tema han sacudido el ecosistema de Java de manera casi destructiva. nosotros (los programadores) deberíamos esforzarnos por una única solución uniforme a este problema. esa es la idea principal detrás del concepto de "máquina virtual" de todos modos, no debe pertenecer ni a google ni a oráculo.

0

Ver http://davy.preuveneers.be/phoneme/ para MIDP, Fundación y perfil personal jvms para Android ARM apk. (¡Gracias Davy!)

He reempaquetado el jvm de Foundation para el uso de la línea de comandos y lo he alojado en vkfox.com/android/bin/foundation-jvm.bin para su placer. Uno podría usar el compilador de eclipse en la aplicación gratuita JavaIDEdroid, o los viejos compiladores kopi o kopisusu con este jvm, junto con el archivo cdc + foundation jar stubbed de un J2ME jdk para un sistema de desarrollo a bordo. El uso de las funciones de TerminalIDE - compilador de consola y sol - con jarras de referencia indicadas también lo llevarán hasta allí. Esto es esencialmente equivalente a jdk1.4 sin cabeza con la posibilidad de gráficos MIDP o awt.

0

prueba la aplicación GNURoot (contenedor ptrace proot) con debian Wheezy;
apt-get update
apt-get install OpenJDK 7-jre-
/usr/lib/jvm/java-7-OpenJDK-Armel/jre/bin/java ...
(incluyendo larga trayectoria)

Cuestiones relacionadas