Intereting Posts
SurfaceHolder.lockCanvas () Возвращение null Невозможно надуть панель инструментов на устройствах pre L Как остановить и запустить ProgressBar Android: actionBarStyle требует уровня API 11 Сравнение использования распознавания речи в Android: по Intent или on-thread? MvvmCross MvxException «Не удалось создать и инициализировать ViewModel» в конфигурации RELEASE Невозможно создать AVD – нет изображения системы CPU / ABI Есть ли способ на Android перехватить входящие звонки / SMS-сообщения, чтобы блокировать / разблокировать его? Получите информацию о GPU на Android без SurfaceView Максимальное значение для кода версии? Текст подсказки, который не отображается в версии 2.3 Android, но работает на 4.1 Не удалось найти com.google.android.gms: play-services: 7.3.0 Нельзя использовать макет ScrollView внутри SlidingUpPanelLayout Xamarin Android Отрегулируйте высоты ActionBar отдельно Есть ли какой-либо эмитент частиц на Android, такой как iOS CAEmitterLayer для эмиттера окружности?

Любое преимущество программирования для мобильной разработки?

Мне нужно разработать приложения для компании на некоторых крупных мобильных ОС, в частности, на iOS, Android и WP7.

Сначала я планировал создать три отдельных приложения для трех разных ОС – каждый из которых использует собственный SDK.

Однако есть ли какие-либо преимущества для этого? Существует множество кросс-платформенных инструментов – Sencha, Phonegap, Rhodes и т. Д. Как «родные» создают приложения, созданные ими, через устройства? Какая у них аппаратная интеграция (камера, GPS, местное хранилище и т. Д.)?

У меня нет ограничений по времени и нет абсолютно никаких проблем при разработке трех собственных приложений, если есть какие-либо преимущества для этого.

EDIT: В случае, если это имеет значение, приложения будут иметь как автономные, так и онлайн-функции.

Отказ от ответственности: я следил за кросс-платформенными инструментами, которые вы упомянули, но никогда с ними ничего не строили. Если вы прочитаете этот пост, вы, вероятно, сможете догадаться, что на данный момент я в основном разработчик Android.

Ответ: это зависит. Конечно, преимущества для родных приложений, но вопрос в том, заботитесь ли вы (или заботитесь) об этих преимуществах, чтобы нести накладные расходы на разработку для нескольких платформ. Поскольку вы не указали подробно о том, какие приложения вы планируете строить, я дам вам краткое изложение того, что знаю.

Я предполагаю, что вы говорите о кросс-платформенных решениях на базе HTML (например, PhoneGap , Sencha и Rhodes ), а не о кросс-платформенных игровых платформах, таких как Corona SDK или Moai, а также не всегда интересном Mono через MonoTouch И Mono для 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.

Для разработки кросс-платформы требуется добавление промежуточного уровня между вашим кодом и встроенными API-интерфейсами. Существует несколько потенциальных затрат на эти виды посреднических слоев, в том числе:

  • Производительность (накладные расходы переводчика, отставание JIT или потеря оптимизации кросс-компилятора),

  • Время загрузки памяти и время загрузки приложения,

  • Совместим ли API промежуточного уровня с новейшими и лучшими API-интерфейсами устройств и аппаратными функциями (если они вам понадобятся)

  • Существуют ли конкретные (не межплатформенные) API-интерфейсы, которые API-интерфейс посредника выполняет или не раскрывает, и можете ли вы их добавить,

  • Предоставляет ли уровень посредничества или позволяет переопределить его возможности представления UX / UI, чтобы приложение выглядело и выглядело «правильным» в каждом целевом сообществе устройств или магазине приложений,

  • Писать один раз, отлаживать всюду (плюс многоплатформенное регрессионное тестирование исправления для любой платформы) и т. Д.

Обратите внимание, что производительность неэффективности может проявляться в более быстром разряде батареи в дополнение к заметному отставанию пользовательского интерфейса или вместо него.

Возможно, вам придется тестировать и / или макет и пользовательские тестовые части вашего конкретного приложения, чтобы определить, нужны ли эти преимущества для дополнительных затрат на разработку разработки.

Я лично использую PhoneGap. Я сохраняю свою библиотеку ui как минимум, возможно, использую только JQuery Mobile. И пока код javascript хорошо написан, возможно, используйте инфраструктуру mvc, я действительно не замечаю потери производительности.

Я иногда использую удаленный php-сервер для базы данных, а вызовы ajax работают плавно, а в других случаях я использую html5-хранилище, которое также работает нормально.

Поэтому, если вы не хотите изучать java или object-c … 🙂

Это один из тех вопросов, для которых нет ответа, и есть много достойных ответов. В общем, ответ заключается в том, что, если не существует специального кода устройства-драйвера, который является собственностью, общий случай использования API, как было разработано, будет избегать просчеты

Java обеспечивает богатый уровень абстракции, хотя есть частная защита, специально предназначенная для лицензирования. Мое предложение состоит в том, чтобы взглянуть на это, как будто вы собираетесь что-то защищать, и это ответит на ваш вопрос лучше, чем любая публикация может