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; Я знаю - не мой вопрос!