Android: Джавац против Далвика

Насколько я понимаю, Google не понравилась политика лицензирования Oracle для использования JRE в Java ME, поэтому она просто переписала он использует свою собственную спецификацию JVM, котораяmimics JRE, но ведет себя немного по-другому, особенно когда это происходит чтобы сделать вещи более эффективными и более безопасными.

Итак, если мое понимание верно, это означает, что когдаjavac запускается в некотором исходном коде Java и компилируется в "двоичный файл" byetcode, совместимая JVM будет интерпретировать этот байт-код иначе, чем Dalvik (в некоторых случаях). Это присущее разница между Dalvik и другими совместимыми JVM.

Если что-то, что я сказал до сих пор, неверно, пожалуйста, начните исправлять меня!

Теперь, если Android поставляется со своим собственным компилятором (что может быть) и компилирует исходный код Java в другой (совместимый с Dalvik) манера, чемjavacтогда я мог понять, как какой-то код (не скомпилированный с Android SDK) не будет работать на 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

Тем не менее, похоже, что вы используетеjavac компилировать приложения для Android!?!? Итак, похоже, у нас есть это:

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

Еслиjavac используется для компиляции всех источников в байт-код, тогда почему Dalvik не может запускать некоторые типы кода Java?

Я задал очень похожий вопрос вчера, и хотя на него был технически дан ответ (после перечитывания моего вопроса Я вижу, что я просто недостаточно конкретен) никто не смог объяснить, что именно присуще Далвику, делает невозможным запуск Java-кода из таких проектов, как Google Guice или Apache Camel. Мне сказали, что для того, чтобы заставить Camel работать на Dalvik, мне нужно получить исходный код Camel, а затем он должен быть "собран с помощью Android SDK", но я не смог получить ясность о том, что это подразумевается или подразумевается.

С Camel, например, у вас есть (упрощенно):

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

Ясно, что внутри JVM Dalvik что-то происходит, что не позволяет ему запускать определенные типы кода Java. I'm trying to understand what types of Java code will not run when "fed" into the Dalvik JVM.

Edit: В до & quot;but Camel 3.0 will run on Android!& Quot; Я знаю - не мой вопрос!