Monotouch/Mono对于Android开发的跨平台能力如何?

3
我是一名Python程序员,想制作我的第一个移动应用程序。我想要制作一个既能在iOS上运行,又能在Android上运行的应用程序,看起来和感觉像本地应用。我想先从一个简单的iPhone应用程序开始,只是为了看看所有东西是如何工作的。Mono似乎是显而易见的解决方案。然而,我惊讶地发现,我找到的几乎所有Monotouch示例代码以及Stackoverflow上的答案都严重依赖于IOS框架,基本上使代码完全不跨平台。例如,我正在研究使用计时器。我读到的所有示例都使用NSTimer。当然,这在C#本身中也是可能的,因此那部分是跨平台的,但是为什么所有这些人都使用NSTimer呢?
因此,我的问题是,Mono开发针对iOS/Android有多少跨平台性?对于小型应用程序仍然值得考虑吗,还是只适用于具有大量业务逻辑的非常大型应用程序?

2个回答

9

你的问题太笼统了。我将为两种情况提供答案:

具体示例
如果你想知道如何创建计时器、创建数组、遍历列表,那么为什么不直接寻找常规的.NET示例,并将其编译成一个可以在两个项目中使用的单一类库。

整体共享代码
如果你只是想在两个平台之间共享代码,你应该查看已经为你创建了模板和示例的框架。其中两种模式是http://www.monocross.net/(MVC)和mvvmcross(MVVM)。这可以帮助你从一开始就设计支持跨平台开发(iOS,Droid,Wp7,桌面等)的项目。

.NET基类库中有计时器、数组和字符串。正如你所见,在MonoTouch包装的Cocoa库中也有一些。例如,你在.NET中有你常规的字符串,但在Monotouch中你也可以选择NSString。我认为回答你的问题,人们有时会使用iOS特定类型,要么是因为他们没有试图使该代码跨平台,这是一种偏好,要么是因为他们必须做一些特定的事情,需要使用那种类型,而这对于每个人来说都不是必须的。

Mono的目的不仅仅是帮助跨平台开发。我来自C#/.NET背景,所以即使我只建立一个屏幕和两个按钮的应用程序,我也会使用MonoTouch,因为我宁愿使用C#与.NET BCL而不是Obj-C。但这是我的个人选择,对我来说足够成为决定性因素。

编辑
我添加了链接。


谢谢你的回答。让我惊讶的不是人们使用NSTimer(和NSString确实)这样的东西,而是它们经常出现在向他人提供的一般建议中(例如在monotouchexamples.com上)。当跨平台不是要求时,当然可以使用这些类,并且个人偏好是完全有效的理由。我只是想知道这就是全部,而不是关于mono/C#本身的某些原因。我会查看MVC和MVVM。 - user66920

0

我认为关键点是,为了使用Mono并避免使用平台特定的类型等,如NSSTring,您需要一个平台特定的包装器(抽象层),使您可以编写仅使用Mono类型的代码。

即,您正在询问如何使用Mono,但实际上您需要的是MonoTouch和MonoDroid(由@valdetero引用的框架,需要这些包装器作为基础支持)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接