Кроссплатформенные мобильные фреймворки
Материал из YourcmcWiki
Версия от 15:33, 20 июня 2016; VitaliyFilippov (обсуждение | вклад)
TL;DR: в целом можно сказать, что производители мобильных платформ постарались сделать так, чтобы писать кроссплатформенные мобильные приложения было как можно более ТРУДНО. Так что все кроссплатформенные фреймворки скорее маргинальны и редко рассматриваются для серьёзных приложений.
- Нативная разработка.
- Тут всё понятно — для кроссплатформенности просто пишется несколько приложений, под Android на Java, под iOS на Objective C (или шо у них там теперь — свифт?), под винфоном на C#.
- PhoneGap/Cordova + HTML/JS фреймворк.
- PhoneGap оборачивает HTML/JS страничку в мобильное приложение. Фактически приложение — это страница, отображаемая в WebView, то есть через браузерный движок. Нативные контролы не используются, HTML/JS фреймворк рисует свои и полностью сам. PhoneGap — открытый и свободный.
- HTML/JS — разумеется, тупит (немного) и жрёт CPU (много). Что означает «тупит»? «Тупит» означает, что задержки обычно невелики (примерно до 0.5 секунды), но мгновенной отзывчивости у интерфейса нет, зачастую нет плавности у анимаций и так далее. Естественно, всё зависит и от сложности интерфейсов.
- Варианты фреймворков: Sencha Touch (GPLv3 / бесплатная коммерческая, продают только поддержку), OpenUI5 (Apache 2.0, не продают ничего вообще) и любые другие по вкусу (оных много — например, все со звёздочкой на http://propertycross.com/).
- PhoneGap — вполне зрелый продукт, Sencha Touch тоже существует уже достаточно давно. По личному ощущению, однако, «серьёзных» приложений на Sencha Touch (да и в целом на PhoneGap…) мало — вероятно, из-за вопросов производительности.
- Xamarin
- C#
- Основан на Mono, Linux’овой/кроссплатформенной реализации .NET.
- Параллельно «родному» runtime запускается Mono, причём под iOS на самом деле используется AOT компиляция, то есть C# код транслируется в бинарный в момент сборки приложения (соответственно, недоступен Reflection и подобная динамика).
- Можно писать НЕкроссплатформенно, с использованием полностью нативного GUI платформы, можно писать кроссплатформенно на Xamarin Forms.
- Xamarin Forms существует меньше года (с 28 мая 2014) и использует нативные контролы с трансляцией вызовов в Mono-код.
- Xamarin Studio по отзывам глюкавая.
- Mono открытый и свободный, Xamarin платный (~1000$ в год), открытой или бесплатной версии не имеет (точнее имеет, но без Xamarin Forms).
- Сколько-то популярен, по крайней мере, замечены русские компании, разрабатывающие на Xamarin.
- Qt
- C++ и декларативный язык описания интерфейсов QML
- Работает аналогично Xamarin — код выполняется в отдельном потоке, используются нативные контролы с трансляцией вызовов в C++.
- Обычная версия открытая и свободная (LGPLv3), расширенные платные и недешёвые (профессиональная в районе 2000$ в год).
- Сам фреймворк Qt очень зрелый и качественный, однако мобильная его версия существует не так давно и, вероятно, несколько сыровата. Мобильных приложений на Qt почти не замечено, по ощущению их ещё меньше, чем на HTML/PhoneGap.
- CodeName One
- Java
- Java-код выполняется как есть на Java-платформах и транслируется в C для iOS. Нативные контролы вроде-бы поддерживаются, но есть мнение, что на самом деле обычно не используются, а используются собственные реализации, стилизируемые под нативные.
- Утверждают, что даже OpenGL у них обёрнут и позволяет писать игры, работающие с приемлемой производительностью.
- Сборка по умолчанию облачная. Базовая подписка бесплатна (с ограничением до 100 андроид-сборок или до 5 iOS-сборок в месяц; 1 iOS сборка считается за 20 андроидовых), ограничение снимается за 108$ в год (и параллельно даётся доступ к генерируемым при сборке нативным исходникам), профессиональная подписка с доп. возможностями стоит 850$ в год. Если хочется потратить ещё больше денег — возможность тоже имеется в виде Enterprise (3800$) и Corporate Server (от 20000$) подписок.
- При этом утверждается, что сам CodeName One свободный и открыт под GPL лицензией с Classpath исключением, и вроде-бы сборку тоже можно осуществлять вне облака самостоятельно, хотя в случае iOS это требует запуска под Mac.
- Существует с 2012 года, утверждают, что их технологией пользуется 15000 разработчиков, а все приложения на CodeName One установлены уже суммарно 75000000 раз.
- NativeScript
- JavaScript
- Свой XML-язык описания интерфейсов, плюс CSS-подобная стилизация, разработка в MVVM парадигме
- Работает опять-таки аналогично — параллельно «родному» runtime запускается JavaScript движок (V8 или iOS’овский JavaScriptCore), XML-описание интерфейсов транслируется в нативные контролы, а вызовы транслируются в JavaScript API
- Полностью открытый и свободный (Apache 2.0).
- Фреймворк совсем новый. Приложений, скорее всего, мало. Но концепция, имхо, самая правильная — это и есть то, чего не хватает мобильным платформам: яваскрипта в сочетании с универсальным языком описания интерфейсов (только не HTML, потому что HTML — не язык описания интерфейсов)
- React Native (ещё http://www.reactnative.com/)
- JavaScript и нативные компоненты — в этом смысле аналогичен NativeScript…
- …но в парадигме, аналогичной обычному React. То есть, с Virtual DOM и пакетными обновлениями, только вместо HTML DOM элементов применяются родные элементы UI платформы. Благодаря этому вроде как довольно отзывчивый.
- Также полностью открытый и свободный (BSD).
- Есть хорошая поддержка инструментария. Например, есть Hot Reload, как в обычном React.
- Может быть интересен по той причине, что Facebook поживее Telerik’а.
- Недобитые Delphi и C++ Builder — пожалуй, также следует их упомянуть для полноты картины
- Вроде-бы пытаются выживать как раз за счёт кроссплатформенной мобильной разработки
- Стоят, как всегда, неадекватно — начиная от 5000$. На этом, наверное, можно уже и заканчивать.