Android: javac vs Dalvik

Rozumiem, że Google nie lubił zasad licencjonowania Oracle dotyczących używania środowiska JRE w Java ME, więc po prostu przepisał je, używając własnej specyfikacji JVM, któranaśladuje JRE, ale zachowuje się trochę inaczej, zwłaszcza jeśli chodzi o zwiększenie wydajności i bezpieczeństwa.

Jeśli więc moje zrozumienie jest poprawne, oznacza to, że kiedyjavac jest uruchamiany na jakimś kodzie źródłowym Java i wkompilowany w kod binarny byet, zgodny JVM interpretuje ten kod bajtowy inaczej niż Dalvik (w niektórych przypadkach). Jest to wrodzona różnica między Dalvik a innymi (zgodnymi) maszynami JVM.

Jeśli coś, co powiedziałem do tej pory, jest nieprawidłowe, zacznij od poprawienia mnie!

Teraz, jeśli Android przyszedł z własnym kompilatorem (który mógłby), i skompilowanym źródłem Java w inny (zgodny z Dalvik) sposób niżjavac, wtedy mogłem zrozumieć, jak jakiś kod (nieskompilowany z Android SDK) nie uruchomiłby się na urządzeniu z Androidem:

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

Wygląda jednak na to, że używaszjavac skompilować aplikacje na Androida!?!? Wygląda na to, że mamy to:

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

Jeślijavac jest używany do kompilacji wszystkich źródeł w kod bajtowy, dlaczego więc Dalvik nie może uruchomić niektórych typów kodu Java?

Wczoraj zadałem bardzo podobne pytanie i chociaż zostało to technicznie udzielone (po ponownym przeczytaniu mojego pytania widzę, że po prostu nie byłem wystarczająco szczegółowy), nikt nie był w stanie wyjaśnić, co jest charakterystyczne dla Dalvik, co uniemożliwia uruchomienie kodu Java z projektów takich jak Google Guice lub Apache Camel. Powiedziano mi, że aby zmusić Camela do uruchomienia w Dalvik, musiałbym zdobyć źródło Camela, a potem musiałby zostać „zbudowany z Android SDK”, ale nie mogłem zrozumieć, co to znaczy lub sugeruje .

Na przykład w Camel masz to (uproszczone):

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

Oczywiście, coś dzieje się w JVM Dalvik, co uniemożliwia mu uruchamianie pewnych typów kodu Java.Staram się zrozumieć, jakie typy kodu Java nie będą uruchamiane po „zasileniu” w maszynę JVM Dalvik.

Edytować: Wcześniej ”ale Camel 3.0 będzie działał na Androidzie!„Wiem - nie moje pytanie!

questionAnswers(3)

yourAnswerToTheQuestion