2011-03-23 3 views
10

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

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

  • C# бэкенд (бизнес-логика)
  • -> Стандарт C# приложение для WP7
  • -> App построен на MonoTouch для iPhone/IPad/и т.д..
  • Java бэкенд (бизнес-логика)
  • -> Стандартный Android Java-приложение (MonoDroid версия C# не готовы пока)
  • -> Стандартные Blackberry Java приложение

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

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

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

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

UPDATE:

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

+0

Прочтите http://stackoverflow.com/questions/4221315/what-kind-of-conversion-efforts-are-there-involved-in-porting-a-complete-droid-ap/4221446#4221446 его меньший размер но хорошо объясняет мое мнение по вопросу о кросс-платформе. – blindstuff

+0

Да, я рад, что мы планируем это с самого начала. Конечно, мы хотим отделить код, специфичный для пользовательского интерфейса, от многоразового кода. – jonathanpeppers

ответ

2

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

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

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

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

+0

Ну, я надеялся на большее «святого грааля», но не похоже, что есть такая вещь. Я могу отметить вас как ответ, если у меня нет других предложений. – jonathanpeppers

+0

Да, я думаю, к сожалению, «святой Грааль» развития кросс-мобильных платформ - это миф. Может быть, когда-нибудь ... –

+0

Альтернативой Appcelerator является PhoneGap. Но вы, похоже, не используете эти инструменты. Я просто подумал, что я упомяну, если кто-то ищет эту тему в будущем и ищет альтернативы. – Tony

0

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

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

С уважением, Martin

+0

Я думаю, что мы хотим избежать использования HTML5, так как я считаю, что наши клиенты захотят сделать более сложные вещи в фоновом режиме и т. Д. – jonathanpeppers

1

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

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

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

+1

На стороне сервера все будут C# (или что бы мы ни пожелали). Я должен был быть более ясным, но под «backend» я подразумеваю бизнес-уровень, который общается с нашим сервером и имеет несколько классов для представления данных с сервера. Это часть, которая будет дублироваться на двух языках. Я определенно согласен с тем, что мы хотим избежать использования x-платформенных инструментов, поскольку все они в некотором роде отстают, хорошие моменты. – jonathanpeppers

+0

Я все равно попытаюсь избежать дублирования слоев (гораздо проще в обслуживании, когда вы уже имеете дело с дублирующимися слоями пользовательского интерфейса для каждой платформы). Вот что я сделал бы: слой пользовательского интерфейса -> уровень бизнес-логики -> уровень доступа к данным -> БД и разные слои пользовательского интерфейса будут разговаривать через веб-службу на одном уровне бизнес-логики. – Beta

+0

Код, обеспечивающий связь с webservice, будет единственным дублированным кодом между двумя языками. Вы можете вытащить веб-сервис из картинки, так как мы можем развить его, как мы хотим. Я имею в виду только код, выполняемый на каждом устройстве. – jonathanpeppers

Смежные вопросы