quién - Ejecución del código de bytes de Java en Android-Sun JVM sobre DalvikVM
tabla de codigo bytecode (7)
Dado que tanto la implementación en java ( OpenJDK
) como la máquina virtual de Android DalvikVM son de código abierto, debe ser posible implementar JavaVM de Sun en la versión superior de DalvikVM de Google. Esto permitiría ejecutar aplicaciones y lenguajes basados en JVM ( Clojure, Jython
) fuera de la caja en el Android.
¿Hay un esfuerzo continuo para producir tal implementación de la JVM de Sun?
Consulte http://davy.preuveneers.be/phoneme/ para MIDP, Foundation y Personal Profile jvms para Android ARM apks. (Gracias Davy!)
He vuelto a empaquetar el Foundation jvm para uso en la línea de comandos y lo alojo en vkfox.com/android/bin/foundation-jvm.bin para su placer. Se puede usar el compilador eclipse en la aplicación gratuita JavaIDEdroid, o los compiladores kopi o kopisusu antiguos con este jvm, junto con el archivo jar de cdc + foundation de un jdk J2ME para un sistema de desarrollo integrado. El uso de las características de TerminalIDE (consola y compilador de sol) con los frascos de referencia indicados también lo llevaría allí. Esto es esencialmente equivalente a un jdk1.4 sin cabeza con la posibilidad de gráficos MIDP o awt.
El OpenJDK hace uso del código nativo por lo que sería un puerto no trivial ... hay al menos una VM ( JikesRVM ) que está 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. Luego, el problema "único" es cuando los idiomas generan un código de bytes sobre la marcha, ya que requeriría el paso adicional de convertir el código de bytes generado al formato DalvikVM mientras el programa se ejecuta en el DalvikVM.
Hmmm ... una especie de JITT (traductor Just In Time) que cubre archivos de clase a un archivo DalvikVM en tiempo de ejecución en el teléfono. Me pregunto qué tan lento sería eso.
Mientras tanto, he encontrado una posible solución (solo JavaME):
- " MicroEmulator es una implementación Java pura de Java ME en Java SE".
- Ejecutando aplicaciones Java ME en Android
No creo que el problema sea técnico. En teoría, puede migrar OpenJDK al iPhone, por ejemplo, pero existen restricciones legales.
Portar OpenJDK a la plataforma Android es posible. Hay esfuerzos como: Shark, Zero y caciocavallo que facilitan enormemente el proceso del puerto (= no ASM, par AWT simple). Además, Android no es más que un núcleo de Linux detrás. La única pregunta es ¿cuándo será hecha por alguien?
Por cierto, tanto los teléfonos iphones como los android tienen un procesador compatible con Jazelle, cualquier persona con habilidades de piratería de procesadores será muy bienvenido si agrega el soporte de Jazelle a OpenJDK. Al hacerlo, podríamos elegir entre: aceleración de recursos muy ligera (Jazelle) y JIT ;-)
Sobre el iPhone, es lo mismo: un puerto es posible. Solo Apple ha incluido una sección en la licencia del iPhone que prohíbe claramente el uso de máquinas virtuales. Según la legislación 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í yo sintonizo y los teléfonos están enlazados. No puedes negarte a vender algo que puedes vender. Aquí, tan pronto como se compile una VM para iPhone, si se rechaza su inclusión en la tienda de iTunes, se aplicará este punto. ¿Hay alguien que quiera desafiar la legalidad de la licencia de Apple en la tierra? No lo creo, la gente infeliz volará a Android o cualquier otra plataforma.
pruebe la aplicación GNURoot (proot ptrace container) con debian Wheezy;
apt-get update
apt-get install openjdk-7-jre
/ usr / lib / jvm / java-7-openjdk-armel / jre / bin / java ...
(incluyendo largo camino)
técnicamente debería ser posible interpretar el código de byte del punto de acceso en dalvik vm o el código de byte de dalvik en el punto de acceso, pero nunca será un diseño eficiente (sin mencionar el elegante) a largo plazo. El costo de hacerlo podría ser muy alto, especialmente con respecto al mantenimiento en la evolución futura de tal ecosistema dividido.
Creo que, desde el principio, dalvik vm es una cuestión de poder / control de mercado en lugar de un esfuerzo innovador para mejorar el ecosistema de la máquina virtual Java. dalvik vm y hotspot vm son dos puentes de carreteras del lago que cruzan el mismo río y se construyen en paralelo a cinco metros uno del otro. Se divide y trae confusión al ecosistema tecnológico de Java.
En mi opinión, Google es definitivamente el líder tecnológico con contribuciones innovadoras durante la última década que empequeñece al oráculo más conservador, pero en este mismo tema han sacudido el ecosistema java de forma casi destructiva. Nosotros (los programadores) debemos esforzarnos por encontrar una solución única y uniforme para este problema. De todos modos, esa es la idea principal detrás del concepto de "máquina virtual": no debe pertenecer ni a google ni a oracle.