Android :javac против Dalvik

Насколько я понимаю, Google не понравилась политика лицензирования Oracle для использования JRE в Java ME, поэтому он просто переписал он использует свою собственную спецификацию JVM, которая имитирует 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-кода?

Вчера я задал очень похожий вопрос, и хотя технически на него был дан ответ (после повторного -прочтения моего вопроса Я вижу, что я просто недостаточно конкретен )никто не смог объяснить, что это такое, что присуще Dalvik, что делает невозможным запуск кода 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 !!! (???)

Очевидно, внутри Dalvik JVM происходит что-то, что не позволяет запускать определенные типы Java-кода. Я пытаюсь понять, какие типы Java-кода не будут выполняться, если их «загрузить» в Dalvik JVM.

Изменить:Раньше " но Camel 3.0 будет работать на Android! " Я знаю -не мой вопрос!

25
задан Ben ODay 31 July 2012 в 04:26
поделиться