Существует ряд вещей, которые Dalvik не будет обрабатывать или не будет обрабатывать так же, как стандартный байт-код Java, хотя большинство из них довольно продвинуты.
Наиболее строгим примером является генерация байт-кода во время выполнения и загрузка пользовательских классов. Допустим, вы хотите создать некоторый байт-код, а затем использовать загрузчик классов, чтобы загрузить его для вас. Если этот трюк работает на вашем обычном компьютере, он гарантированно не будет работать на Dalvik, если вы не измените генерацию байт-кода.
Это не позволяет вам использовать определенные структуры внедрения зависимостей, наиболее известным примером является Google Guice (хотя я уверен, что некоторые люди работают над этим). С другой стороны, AspectJ должен работать, поскольку он использует инструментарий байт-кода в качестве шага компиляции (хотя я не знаю, пытался ли кто-нибудь).
Что касается других языков jvm - все, что в конце концов компилируется в стандартный байт-код и не использует инструментарий байт-кода во время выполнения, может быть преобразовано в Dalvik и должно работать. Я знаю, что люди запускали Jython на Android, и он работал нормально.
Другая вещь, о которой следует знать, это то, что нет просто во времени компиляции . Это не является проблемой Dalviks (вы всегда можете скомпилировать любой байт-код на лету), но Android не поддерживает это и вряд ли сделает это. В то время как микробенчмаркинг для стандартной Java был бесполезен - компоненты имели разные характеристики времени выполнения в тестах, чем как части более крупных систем - микробенчмарки для телефонов Android имеют смысл.