Мы много писали об архитектуре новой виртуальной машины, которую мы создали для iOS, и почему мы ее создали. До недавнего времени мы всегда рассматривали его как специальный инструмент Codename One. То, что было бы полезно только для нас. Мы использовали открытый исходный код, потому что «это наш путь», и после этого мало думали об этом.
Недавно мы начали осознавать, что этот инструмент может быть полезен для других разработчиков, которые могут использовать его не так, как мы планировали. Мы также пришли к выводу, что это не может быть плохой идеей в целом. Таким образом, мы фактически запускаем виртуальную машину Codename One в виде ParparVM, и она имеет много интересных преимуществ.
Чтобы избежать путаницы и сложной поддержки поддержки, мы всегда указывали, что мы не предоставляем поддержку для создания Codename One изначально. Это имело смысл еще в тот день, когда нашими основными каналами поддержки были электронная почта и дискуссионный форум. Однако теперь, когда мы сфокусировали поддержку вокруг StackOverflow, это не должно быть таким большим барьером, поскольку это не увеличит «шум». Мы не можем гарантировать ответ на каждый вопрос, поскольку эти вещи могут выйти из нашей зоны комфорта, но мы постараемся сделать все возможное, как обычно. Так что не стесняйтесь задавать вопросы о VM и нативной компиляции на StackOverflow с «codenameone» тега .
Начиная
Источник доступен здесь . Проекты ByteCodeTranslator и JavaAPI разработаны как проект NetBeans, хотя должна быть возможность работать с любой IDE или муравьем Java напрямую. Требуется asm 5.0.3, который вы можете найти в проекте cn1-binaries .
Вы можете запустить процесс перевода, используя:
java -jar ByteCodeTranslator.jar ios path_to_stub_class:path_to/vm/JavaAPI/build/classes;path_to_your_classes dest_build_dir MainClassName com.package.name "Title For Project" "1.0" ios none
После успешного завершения процесса перевода у вас должен быть действующий проект xcode, который вы можете запускать и использовать как обычно. Для этого вам понадобится Mac.
Предполагается, что в имени основного класса должен быть public static void main(String[])
метод, и предполагается, что он находится в com.package.name
каталоге (для примера, вам необходимо заменить его com.package.name
фактическим пакетом, переданным переводчику).
Почему другая виртуальная машина для iOS?
Кажется, что существует много открытых Java Java VM с открытым исходным кодом, но реальность такова, что большинство из них являются либо проприетарными, либо полагаются на очень рискованный путь. Преобразуя байт-код в исходный код языка Си, ParparVM фактически является единственной виртуальной машиной, о которой мы знаем, которая на 100% поддерживает подход Apple для совместимости с Java. Ближайшим вторым местом будет J2ObjC от Google, но он не предназначен для использования в качестве полноценной виртуальной машины и фактически занимает совсем другой откат от ParparVM.
Бэкэнд C XMLVM имел похожую архитектуру, но проект больше не поддерживается. Все другие Java VM для iOS, которые активно поддерживаются, используют подходы, которые Apple официально не поддерживает, такие как код LLVM или код ARM. Это делает эти решения очень хрупкими к изменениям, сделанным Apple. Например, эта цитата :
Наша работа по добавлению полной поддержки iOS 9 ко времени ее публичного выпуска была одной из самых сложных задач, с которыми мы столкнулись в нашем существовании.
Хенрик Мюллер
В отличие от ParparVM не требуется никаких изменений кода для поддержки iOS 9, 64-разрядных, битовый код или другие изменения, сделанные Apple.
Основная работа ParparVM заняла у нас около месяца, а виртуальная машина по сравнению с ней тривиальна. Тривиально в этом смысле также хорошо, так как это означает, что даже новички могут расширять и улучшать ВМ без серьезного опыта разработки компиляторов.
Принятие мер
Проверьте ParparVM страницу в одном проекте Codename, звезда / раскошелиться и начать играть с ним.
Дайте нам знать, что вы думаете и как мы можем улучшить охват / функциональность виртуальной машины в комментариях ниже. Мы думаем, что можем добавить множество функций к виртуальной машине в качестве условных опций и, таким образом, оставить вещи, которые не нужны Codename One, как стороннее расширение, которое можно включить по желанию.