开发移动C#app以在多个平台上运行

时间:2011-04-28 07:19:31

标签: iphone android ipad xamarin.ios xamarin.android

我们有一个在Windows Mobile上运行的业务线应用程序。它是一个带有本地SQL CE数据库的Winforms应用程序,并从服务器上运行的WCF Web服务获取其数据。

现在,客户总是在问“为什么不为iPhone / iPad / Android / Phone 7等制作版本”。我的老板问这会有多难。我最初的答案很难,特别是因为我可能是唯一一个做这项工作的人。我在Visual Studio开心的地方以外没有任何经验。

现在我遇到了MonoTouch和MonoDroid。他们似乎提供了一个简单的解决方案,但我确信有很多问题。我怀疑我是否能够为Android编译我的应用程序。

我倾向于认为这将是太多的工作,唯一现实的解决方案是一个移动网站,每个页面的几个版本用于不同的屏幕分辨率。不幸的是,现有的应用程序有一个本地数据库,并且“有时连接”,因此不会削减它。

在浪费大量时间之前有任何建议和提示吗?

干杯
标记

3 个答案:

答案 0 :(得分:8)

  

我怀疑我能够只为Android编译我的应用程序

这是正确的;你不会。

因此,背景:MonoTouchMono for Android的设计理念是将“核心”.NET和C#体验带入iOS和Android,同时还展示了每个特定平台的基本功能。而PhoneGapTitanium抽象底层平台(对于“一次编写,随处运行”的氛围),MonoTouch和Mono for Android不提供平台抽象,直接暴露底层平台类型和成员。

结果是MonoTouch程序使用MonoTouch.UIKit.UIButton,它直接包装底层的CocoaTouch UIButton类型。

同样,Mono for Android程序会使用Android.App.Activity,它会直接包装基础Android android.app.Activity类型。

两个平台上的共同点是您在.NET,.NET CF,Silverlight,Windows Phone 7和Mono上找到的“核心”框架命名空间和类型:SystemSystem.Collections.Generic,{{ 1}}(是的,Linq到对象),System.Linq(是的,Linq到XML),System.Xml.Linq等等。例如,请参阅assemblies included in Mono for Android

那么,您可以在Android上使用现有的Windows Mobile应用吗?不,因为Android的Mono不提供System.IO

然而,您应该可以重构现有代码以遵循模型/视图/控制器设计模式(或MVVM,或......),抽象出UI(视图)这样你就可以替换它用于各种平台,例如带有MonoTouch的iOS UI,带有XAML的WP7用户界面,带有Mono for Android的Android用户界面,带有ASP.NET MVC的HTML用户界面等等。你不会得到“一次编写,随处运行”的体验,但是您将能够为用户提供与其所选平台一致的本机用户界面。

例如,请参阅MIX11 Conference Apps,它使用通用代码库,同时为iOS,Android和WP7提供特定于平台的用户界面。

答案 1 :(得分:1)

看看钛和手机盖。

答案 2 :(得分:0)

我的建议是快速浏览一下WP7。如果你有Visual Studio(你做过)和任何种类的C#体验,那么很容易就可以了。那么你应该能够更容易地猜测开发C#应用程序需要多长时间(并且可能使用MonoDroid将其移植到Android)。

是的,Titanium& PhoneGap是选项,但我个人认为MonoDroid看起来更好。

您获得最多请求的平台是什么?我猜Android,因为这似乎是最有可能的。我见过很多人都说MonoDroid非常稳固。