Мобильное приложение - Ориентация на iPhone, WP7, Android и Blackberry

Есть ли разумный способ разработки кросс-платформенного мобильного приложения? Мы хотим, чтобы они были родными приложениями на каждой платформе, а не обязательно какой-то веб-страницей.

В настоящее время мы думаем разбить его на два языка:

  • С# backend (бизнес-логика)
  • → Стандартное приложение С# для WP7
  • → Приложение построено на MonoTouch для iPhone/iPad и т.д.
  • Бэкэнд Java (бизнес-логика)
  • → Стандартное приложение Java для Android (версия MonoDroid С# не готова пока)
  • → Стандартное приложение Blackberry Java

Мы также могли бы сначала изначально работать на С# и использовать один из инструментов преобразования, чтобы наш С# был преобразован в Java в качестве отправной точки.

Есть ли другой подход? Наши навыки включают в себя, в основном, сильный фон С#.Net и незначительный опыт Java.

Мы действительно не хотим идти на низкий уровень и использовать что-то вроде C/С++ для выполнения этой работы. Обычно это простые приложения LOB, которые обмениваются данными с некоторыми веб-службами.

Боковой вопрос: как это делают разработчики игр Angry Birds?

UPDATE:

MonoDroid официально выпущен. Похоже, вам нужно будет использовать Java для BlackBerry. Мы рассматриваем возможность разработки для BlackBerry вообще, потому что разработка для остальных трех платформ была упрощена. Конечно, определенная стоимость связана с тем, что MonoTouch и MonoDroid составляют 399 долларов США, и вам также понадобится лицензия для Visual Studio (это не включает стоимость магазина приложений и т.д.).

Ответ 1

Там нет хорошего простого ответа, который я знаю для всех мобильных платформ. Вы можете использовать среды разработки, такие как Appcelerator Titanium, которые кросс-компилируются в собственный код на разных платформах (прямо сейчас, например, я думаю, что Titanium поддерживает iOS и Android, с планами для Blackberry). Однако у них обычно есть ограниченный API, к которому у вас есть доступ, и вы все еще нуждаетесь в разработке различных пользовательских интерфейсов для разных платформ (в моей коммерческой работе я никогда не использовал такую ​​платформу)

Вы могли бы также спроектировать всю бизнес-логику в конце концов веб-сервисов, а затем просто написать приложения "тонкого клиента" для каждой платформы. Это работает, но, конечно, требуется доступ к сети, когда конечный пользователь хочет использовать ваше приложение. (Обычно он будет там, но иногда может и не быть)

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

(Кстати, я считаю, что такие игры, как Angry Birds, написаны в основном в OpenGL, а затем загружаются на процессор OpenGL на каждой платформе, но я могу ошибаться...)

Ответ 2

Это отличные ответы. Я согласен, разработка x-платформы по-прежнему очень примитивна. Я бы хотел добавить 2 очка:

1) Вам не нужно писать свой сервер на разных языках. Выберите один язык (исходя из вашего уровня комфорта, критериев производительности и т.д.), А затем подключитесь к приложениям, ориентированным на платформу, непосредственно на сервер. Если ваш серверный сервер - это код на стороне сервера, один из способов общения с ним - через XmlHttpClient. Если это кусок родного кода, распространенный в разных приложениях и написанный на языке C++, вы можете использовать JNI из Java и сборки обертки из С#.

2) Еще одна причина избежать использования x-платформенных инструментов - это то, что вам всегда нужно ждать, пока они будут поддерживать новые API, выпущенные поставщиком платформы (Apple, Google, MSFT и т.д.). После того, как эти компании выпустят новые API, инструменты необходимо будет обновить, и только тогда вы сможете использовать новые API.

Ответ 3

Я не думаю, что это (легко) возможно, если вы не используете какой-либо HTML5 (jquerymobile и т.д.) в WebView в своем собственном приложении (выглядит как реальное приложение, но все же вы каким-то образом увидите, что это а не вместо обычного браузера. Вы все равно можете использовать некоторый собственный API с устройства (акселерометр,...).

Существуют (коммерческие) платформы, такие как Sybase Unwired Platform, которые помогают вам генерировать некоторый код клиента. Afaik для Blackberry и Windows Mobile даже некоторые пользовательские интерфейсы могут быть созданы из бизнес-объектов на сервере. Но для меня это звучит так, что это может быть слишком тяжело для вашего дела.

С уважением, Мартин