Разработка мобильного приложения C # для работы на нескольких платформах

У нас есть бизнес-приложение, работающее на Windows Mobile. Это приложение Winforms с локальной базой данных SQL CE и получает его данные из веб-службы WCF, запущенной на сервере.

Теперь клиенты всегда спрашивают: «Почему бы вам не сделать версию для iPhone / iPad / Android / Phone 7 и т. Д.». Мой босс спросил, как это будет тяжело. Мой первоначальный ответ очень тяжелый, потому что я, вероятно, был бы единственным человеком, выполняющим эту работу. У меня нет опыта вне моего Visual Studio.

Теперь я столкнулся с MonoTouch и MonoDroid. Они, кажется, предлагают легкое решение, но я уверен, что есть много проблем. Я сомневаюсь, что смогу просто скомпилировать приложение для Android.

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

Любые предложения и советы, прежде чем тратить огромное количество времени?

ура
отметка

Я сомневаюсь, что я смогу просто скомпилировать приложение для Android

Это верно; Вы не будете.

Итак, предпосылка: философия дизайна MonoTouch и Mono для Android – это «ядро» .NET и C # для iOS и Android, а также раскрытие основных особенностей каждой конкретной платформы. В то время как PhoneGap и Titanium описывают базовую платформу (для видеозаписи «один раз, в любом месте»), MonoTouch и Mono для Android не содержат абстракций платформы и напрямую раскрывают основные типы и элементы платформы.

В результате программы MonoTouch используют MonoTouch.UIKit.UIButton , который непосредственно обертывает базовый тип UIButton CocoaTouch .

Аналогично, Mono для Android-программ будет использовать Android.App.Activity , который напрямую обертывает базовый тип Android android.app.Activity .

Общими для обеих платформ являются «основные» пространства имен и типов инфраструктур, которые вы найдете на .NET, .NET CF, Silverlight, Windows Phone 7 и Mono: System , System.Collections.Generic , System.Linq (да, Linq-to -Objects), System.Xml.Linq (да, Linq-to-XML), System.IO и т. Д. И т. Д. Например, см. Сборки, входящие в состав Mono для Android .

Итак, можете ли вы использовать существующее приложение Windows Mobile как есть на Android? Нет, потому что Mono для Android не предоставляет System.Windows.Forms .

Тем не менее , вы должны будете реорганизовать свой существующий код, чтобы следовать шаблону проектирования Model / View / Controller (или MVVM или …), абстрагируясь от пользовательского интерфейса (View), чтобы его можно было заменить на различные платформы, Например, iOS UI с MonoTouch, WP7 UI с XAML, Android UI с Mono для Android, HTML-интерфейс с ASP.NET MVC и т. Д. И т. Д. Вы не сможете получить опыт «писать один раз, работать где угодно», Но вы сможете предоставить пользователю собственные пользовательские интерфейсы, соответствующие их выбранной платформе.

Например, см. Приложения конференции MIX11 , в которых используется общая база кода, предоставляя интерфейсы для платформы для iOS, Android и WP7.

Посмотрите на титан и телефонную разборку.

Мое предложение – быстро взглянуть на WP7. Достаточно легко в нее входить, даже если у вас есть Visual Studio (что вы делаете) и опыт C # любого рода. Тогда вы сможете более легко оценить, сколько времени вам понадобится для разработки приложения C # (и, возможно, порта для Android с помощью MonoDroid).

И да, Titanium & PhoneGap – это варианты, но я лично считаю, что MonoDroid выглядит лучше.

На какой платформе вы получаете большинство запросов? Я угадываю Android, поскольку это кажется наиболее вероятным. Я видел много людей, говорящих, что MonoDroid действительно прочный.