Я понимаю, что 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
используется для компиляции всех источников в байт-код, то почему Далвик не может запускать некоторые типы
кода 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 !!! (???)
Очевидно, что что-то происходит внутри JVM Dalvik, что мешает ему запускать определенные типы Java-кода. Я пытаюсь понять, какие типы Java-кода не будут выполняться при "подаче" в JVM Dalvik.
Изменить: В начале, но Camel 3.0 будет работать на Android! " Я знаю - не мой вопрос!