Правильно ли я понимаю, что в принципе, можно разрабатывать приложения под андроид на любом языке, который компилируется в байт-код JVM? Всякие Jython, Groovy, Scala, Clojure и так далее.
UPD: оказалось, что можно, но есть одно НО: если java-классы уже встроены в Android, то для других языков их придётся пихать в приложение. Но ведь вряд ли необходимо использовать сразу все библиотеки в одном приложении. Я как-то сталкивался с инструментами, позволяющими из Python проекта убрать все неиспользуеые либы. Вопрос — есть ли что-то подобное для Jython, Clojure, Scala? Может для какого-то/каких-то из этих языков есть среды разработки мобильных приложений — в идеале, включающие в себя такие вот оптимизирующие инструменты?
Кто-нибудь знает, как у вышеперечисленных инструментов с оптимизацией? Она есть вообще?) Чистится ли проект от неиспользуемых библиотек и вообще всего, что не используется?)
Там не оригинальная JVM, а ее реализация от Google, по имени Dalvik.
На сколько я знаю, были какие-то опыты по компиляции Scala под Dalvik, но по-сути единственный язык для разработки под Android это Java
Имхо, надо было не Scala под Dalvik компилировать, а байт-код одной виртуальной машины, в байт-код другой. Я б даже купил такой компилятор, если препятствие — лицензионные отчисления Oracle. А я вообще не покупаю софт, так что это было бы исключением))
Эх, жаль я ещё слишком глуп, чтобы писать компиляторы.
Вас несколько дизинформировали. Сначала Java-исходники комплятся в jvm-байткод. Затем андроидные build-tools конвертят его в smali (dexing) - байткод для далвика. На выходе получется файлик classes.dex который скармливается далвику. Так что на jvm-языках вполне и легко можно писать под андроид. Одна проблема - придется носить с собой вест рантайм таких языков,
который большой, толстый итд.
Так, это уже интересно.
"Придётся носить с собой весь рантайм..." — если я всё пишу на одной машине, это ведь ничего не изменит? На сам размер конечного приложения выбор альтернативного языка не повлияет, ведь так? Я имею ввиду, не считая того, что разные компиляторы могут компилировать разный по качеству байт-код.
И да, я почти ничего не писал под андроид, а то, что писал, писал на Python/Kivi. То есть jar к проекту не подключал)
То что я назвал рантаймом это например либы языка. Если жавовые либы уже есть на девайсе, то скаловые врядли. Или например довелось мне видеть во что компилируется Groovy. Там очень много специфичных системных груви-классов требуется в рантайме.
@bimeg но ведь есть вроде инструменты, которые анализируют, какие модули в проекте не используются, и чистят всё, что не нужно. Во всяком случае, для Python такое что-то видел. В крайнем случае можно и руками чистить))
Я, конечно, понимаю, что это уже костыли получаются, но в общем-то, при желании, можно сделать такую штуку, что я, собственно, и хотел узнать. Спасибо.
Да, но меня в первую очередь интересовала возможность писать на языках, компилируемых в байт-код jvm. Оказалось, это не та jvm, и байи-код у неё свой. Это грустно, хотя и понятно, почему так получилось.
@deadbyelpy нельзя написать приложение с наивными компонентами чисто на C++. "Android NDK (native development kit) – это набор инструментов, которые позволяют реализовать часть вашего приложения используя такие языки как С/С++."