Android: javac vs dalvik

Según tengo entendido, a Google no le gustó la política de licencias de Oracle para usar JRE en Java ME, por lo que simplemente lo reescribió usando su propia especificación JVM queimita El JRE se comporta de manera un poco diferente, especialmente cuando se trata de hacer las cosas más eficientes y seguras.

Entonces, si mi entendimiento es correcto, significa que cuandojavac se ejecuta en algún código fuente de Java y se compila en byetcode "binario", una JVM compatible interpretará que el bytecode será diferente al de Dalvik (en algunos casos). Esta es la diferencia inherente entre Dalvik y otras JVM (compatibles).

Si algo de lo que he dicho hasta ahora es incorrecto, ¡por favor comience a corregirme!

Ahora, si Android viene con su propio compilador (que podría ser), y compiló la fuente Java de una manera diferente (compatible con Dalvik) quejavac, entonces pude entender cómo algunos códigos (no compilados con el SDK de Android) no se ejecutarán en un dispositivo Android:

MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> android-compiler --> MySource.class (Dalvik-compliant) --> Dalvik JVM --> running Android app

Sin embargo, parece que usasjavac para compilar aplicaciones de Android!?!? Así que parece que tenemos esto:

MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> javac --> MySource.class (JRE-compliant) --> Dalvik JVM --> running Android app (???)

Sijavac se utiliza para compilar todas las fuentes en el código de bytes, entonces ¿por qué Dalvik no puede ejecutar algunos tipos de código Java?

Ayer hice una pregunta muy similar y aunque fue respondida técnicamente (después de releer mi pregunta, veo que simplemente no era lo suficientemente específica) nadie pudo explicar qué es lo que es inherente a Dalvik que hace imposible ejecutar el código Java De proyectos como Google Guice o Apache Camel. Me dijeron que para lograr que Camel se ejecute en Dalvik, que tendría que obtener la fuente de Camel y luego tendría que ser "construido con el SDK de Android", pero no pude aclarar lo que eso significaba o implicaba. .

Con Camel, por ejemplo, tienes esto (simplificado):

RouteBuilder.java --> javac --> RouteBuilder.class --> jartool --> camel-context-2.9.jar --> JVM --> running Camel ESB
RouteBuilder.java --> javac --> RouteBuilder.class --> jartool --> camel-context-2.9.jar --> Dalvik JVM --> doesn't work !!! (???)

Claramente, algo está sucediendo dentro de la JVM de Dalvik que le impide ejecutar ciertos tipos de código Java.Estoy tratando de entender qué tipos de código Java no se ejecutarán cuando se "introduzcan" en la JVM de Dalvik.

Editar: En lo anterior "¡Pero Camel 3.0 se ejecutará en Android!"Lo sé - no es mi pregunta!

Respuestas a la pregunta(3)

Su respuesta a la pregunta