Android: Javac gegen Dalvik

Meines Erachtens mochte Google die Oracle-Lizenzierungsrichtlinie für die Verwendung der JRE in Java ME nicht. Deshalb hat es sie nur mit seiner eigenen JVM-Spezifikation neu geschriebenimitiert Die JRE verhält sich jedoch etwas anders, insbesondere, wenn es darum geht, die Dinge effizienter und sicherer zu machen.

Wenn ich das richtig verstehe, bedeutet das, dass wannjavac Wird auf einem Java-Quellcode ausgeführt und in einen "binären" Bytecode kompiliert, interpretiert eine kompatible JVM diesen Bytecode anders als Dalvik (in einigen Fällen). Dies ist der inhärente Unterschied zwischen Dalvik und anderen (konformen) JVMs.

Wenn etwas, was ich bis jetzt gesagt habe, falsch ist, fange bitte damit an, mich zu korrigieren!

Nun, wenn Android mit einem eigenen Compiler (den es möglicherweise) und einer anderen (Dalvik-kompatiblen) Art der Kompilierung von Java-Quellcode kam alsjavac, dann könnte ich verstehen, wie ein Code (nicht mit dem Android SDK kompiliert) nicht auf einem Android-Gerät ausgeführt werden würde:

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

Es sieht jedoch so aus, als ob Sie es verwendenjavac Android Apps kompilieren!?!? Es sieht also so aus, als hätten wir Folgendes:

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

Objavac wird verwendet, um alle Quellen in Bytecode zu kompilieren. Warum kann Dalvik dann einige Arten von Java-Code nicht ausführen?

Ich habe gestern eine sehr ähnliche Frage gestellt, und obwohl sie technisch beantwortet wurde (nachdem ich meine Frage noch einmal gelesen hatte, sah ich, dass ich einfach nicht spezifisch genug war), konnte niemand erklären, was Dalvik anhaftet, das es unmöglich macht, Java-Code auszuführen aus Projekten wie Google Guice oder Apache Camel. Mir wurde gesagt, dass ich, um Camel auf Dalvik zum Laufen zu bringen, den Quellcode von Camel und dann "mit dem Android SDK" erstellen müsste, aber ich konnte keine Klarheit darüber erlangen, was dies bedeutete oder implizierte .

Mit Camel haben Sie zum Beispiel Folgendes (vereinfacht):

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 !!! (???)

Es ist klar, dass in der Dalvik-JVM etwas passiert, das verhindert, dass bestimmte Arten von Java-Code ausgeführt werden.Ich versuche zu verstehen, welche Arten von Java-Code nicht ausgeführt werden, wenn sie in die Dalvik-JVM "eingespeist" werden.

Bearbeiten: Vorher "aber Camel 3.0 läuft auf Android!"Ich weiß - nicht meine Frage!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage