Ответ 1
Отказ от ответственности: я отслеживал кросс-платформенные инструменты, о которых вы упоминали, но никогда с ними ничего не строил. Если вы прочитаете этот пост, вы, вероятно, сможете догадаться, что на данный момент я в основном разработчик Android.
Ответ: это зависит. Конечно, есть преимущества для родных приложений, но вопрос в том, заботитесь ли вы (или заботитесь) об этих преимуществах, чтобы нести накладные расходы на разработку для нескольких платформ. Поскольку вы не указали подробно о том, какие приложения вы планируете строить, я дам вам краткое изложение того, что я знаю.
Я собираюсь предположить, что вы говорите о кросс-платформенных решениях на базе HTML (например PhoneGap, Sencha и Родос), а не кросс-платформенные игровые платформы, такие как Corona SDK или Moai, а также не всегда интересный Mono через MonoTouch и Моно для Android. Я также исключаю Titanium, который не поддерживает Windows Phone.
Некоторые пробелы, которые я вижу между родными и этими кросс-платформенными решениями, выглядят следующим образом:
- Знакомство с пользовательским интерфейсом
- Производительность (особенно пользовательский интерфейс)
- Совместимость
- Отладка
- API платформы
Знакомство с пользовательским интерфейсом
Пользователи каждой платформы создают определенные ожидания относительно того, как все работает. Приложения в iOS часто имеют определенные парадигмы пользовательского интерфейса (которые показывают вверх сверху с помощью кнопки "Назад" слева, те, которые имеют округленный интерфейс таблицы/списка и т.д.), Приложения в Android могут иметь другой (например, ActionBar, который похож, но не совсем то же, что и панель iOS, или длинные нажатия для контекстных меню), пользователи Windows Phone - еще один (виды плит и панорамы). Если вы создаете тот же HTML-интерфейс, вы, вероятно, не сможете воспользоваться этим. Те знакомые шаблоны пользовательского интерфейса делают приложение более интуитивным и удобным для пользователя, который обычно не тратит время на изучение нескольких платформ.
Производительность
Другим преимуществом native является производительность, особенно производительность, связанная с пользовательским интерфейсом, заключается в том, что необработанная графическая мощность рендеринга или просто вычисления. Если у вас простые пользовательские интерфейсы, это может иметь значение, но если у вас сложный анимированный интерфейс, то некоторые вещи могут оказаться не такими гладкими. Это особенно верно в Android, где у вас есть огромный выбор устройств, в том числе довольно маломощных.
Совместимость
Другим недостатком использования кросс-платформенного инструмента HTML является то, что разные телефоны имеют дело с HTML/CSS/JavaScript по-разному. Это смешно, потому что это немного обоюдоострый меч. С одной стороны, здорово, что HTML по своей сути кросс-платформенный, с другой стороны, у вас все еще есть проблемы с устройством, зависящие от устройства. Это особенно актуально снова в Android, где у вас так много разных устройств, и по какой-то причине производители любят возиться с реализацией WebView
. У вас заканчиваются небольшие ошибки, когда некоторые устройства делают странные вещи. Если вы переходите полностью на родной язык, вы, как правило, лучше совместимы (по цене, конечно, за дополнительную работу). Поддержка старых версий Android также, как правило, отсутствует.
Отладка
Отладка JavaScript - это не самый замечательный опыт на мобильной платформе. В конечном итоге вы делаете много записей на консоли. Он работоспособен, но, конечно, не так хорош, как шаг за шагом в ваш код. Кажется, что на этом фронте есть некоторый прогресс (см. этот инструмент, называемый weinre), но я не могу прокомментировать, насколько он хорош, пока я не получил вокруг копаться в нем.
Не только такая отладка сложнее, но заметные ошибки сложнее. Ошибки в вашем JavaScript-коде не будут попадать в ваши журналы, если вы их не поймаете вручную и не запишите. Вы можете закончить тем, что просто терпят неудачу.
API-интерфейсы платформы
В общем, крупные игроки, о которых вы упомянули, имеют довольно приличную аппаратную поддержку. Возможности, которые вы упомянули как камера, GPS и локальное хранилище, довольно высоки в списке функций, важных для разработчиков приложений, поэтому они включают их. Полный список функций, которые вы, вероятно, захотите перейти на веб-сайт каждой из них (здесь диаграмма поддержки высокоуровневых функций PhoneGap по платформенапример), но, как правило, большая "особенность телефона", о которой вы думаете. Тем не менее, есть множество более сложных вещей, которые, насколько я знаю, эти структуры не делают или не делают, а особенно те, которые имеют меньше общего с функциями телефона и более связанными с платформой. Threading - один из примеров.