.NET平台开发Windows Phone 7、iPhone及Android应用

移动开发 开发
本文为著名开发者赵劼为InfoQ撰写的一篇文章,详实记录了如何基于.NET/C#,开发面向Windows Phone 7,iPhone及Android三个平台的应用程序,以及其中的注意事项。

编者按:在Windows Phone 7发布之后,移动开发领域除iPhone和Android之外季军即将明朗,越来越多的开发者开始向Windows Phone 7平台转移。本文为著名开发者赵劼为InfoQ撰写的一篇文章,详实记录了在近日举办的Modern .NET DDD Conference会议上,著名开发者Chris Hardy在他的演讲中展示了如何基于.NET/C#,开发面向Windows Phone 7,iPhone及Android三个平台的应用程序,以及其中的注意事项。

首先Chris列举了三个平台上使用的工具及框架等周边环境:

  Windows Phone 7 iPhone(MonoTouch) Android(MonoDroid预览版)
操作系统 Windows Mac 跨平台
开发工具 Visual Studio 2010 MonoDevelop VS 2010 / MonoDevelop
设计工具 Expression Blend 4 Interface Builder XML文件 / DroidDraw
开发框架 Silverlight for WP Silverlight 3的超集 Silverlight 3的超集
社区情况 极好 较好 尚早

iPhone VS Windows Phone 7 VS Android
iPhone VS Windows Phone 7 VS Android

MonoTouch是Novell公司推出的基于Mono的iPhone OS应用程序开发套件,并可以将应用程序发布至苹果应用程序商店。Mono是一款基于ECMA标准开发的.NET运行环境,使用JIT(Just-in-Time)编译方式来执行IL代码,不过由于iPhone OS设备的限制,MonoTouch使用了AOT(Ahead-of-Time)编译方式,直接将原生代码部署至iPhone OS设备(iPhone,iPhone 4,iPad)上。MonoTouch还提供了一个Linker,它会将SDK及程序代码中真正使用到的部分静态链接至应用程序中,从而削减了应用程序的体积。使用MonoTouch开发出来的应用程序可以在iPhone OS设备上独立运行,这是因为MonoTouch会将一个运行时放入应用程序内部的原因。据Chris称,这会给应用程序的体积带来大约6MB的增长。

使用MonoTouch,.NET/C#程序员可以利用现有的知识进行开发,能够使用反射、泛型、LINQ、Lambda等各种高级的.NET/C#特性。面向原生API的绑定存放在monotouch.dll中的MonoTouch命名空间下,并与CocoaTouch(即用于iPhone OS开发的原生Objective-C框架)的命名空间映射。在绑定时,MonoTouch不是一味地直接暴露出Cocoa Touch的功能,而是在一定程度上将它的API改写为更倾向于.NET程序员的形式。例如UIView的Frame属性为System.Drawing.RectangleF类型,而不是Cocoa Touch中原本使用的CGRect。对于一些如NSArray这样的类型,MonoTouch也在合适的地方将其转化为强类型的数组。在调试方面,MonoTouch使用了Mono的Soft-Debugger,支持在模拟器、真机,甚至通过WIFI进行调试。

MonoDroid是针对Android系统的应用程序开发套件,大体和MonoTouch相同,目前正处在预览发布阶段,只有少量早期预订的用户拿到了SDK。

据Chris称,有了MonoTouch和MonoDroid便可以复用相当部分的代码,包括现有的开源项目,如Json.NET、FlickrNet及XnaTouch。XnaTouch是一款基于MonoTouch的XNA框架实现,简化XBox及Windows Phone 7上的游戏向iPhone OS上的移植工作。不过在复用时并不能共享二进制文件,而必须针对不同的平台重新编译代码。

在UI部分,三个平台各有原生的解决方案。除了Windows Phone 7以外,iPhone和Android分别使用MonoTouch及MonoDroid提供的原生API的C#绑定进行开发。例如,MonoTouch进行UI开发时使用的是iPhone OS标准的应用程序的架构,包括其MVC驱动方式。开发人员可以通过Interface Builder编辑XIB文件,MonoTouch会自动根据XIB的内容在局部类中生成C#代码,所有的outlet,action等元素都会在代码中得到体现。

Chris也提到了其他一些必须针对平台编写特定代码的地方,例如在文件的存储上,MonoTouch和MonoDroid可以直接像本地路径写入数据,而在Windows Phone 7上则必须使用独立存储:

  1.     void SaveLocal(string data)  
  2.     {  
  3. #if (MonoTouch || MonoDroid)  
  4.         File.WriteAllText(_localPath, data);  
  5. #elif WINDOWS_PHONE  
  6.         using (var appStorage =   
  7.             IsolatedStorageFile.GetUserStoreForApplication())  
  8.         {  
  9.             var file = appStorage.OpenFile(_localPath, FileMode.Create);  
  10.             FileExtension.WriteAllText(file, data);  
  11.         }  
  12. #endif  
  13.     }  
  14.  

同理,使用WebClient获取数据时,在MonoTouch及MonoDroid上可以直接调用DownloadFile相关方法来下载文件,而在Windows Phone 7中,则需要使用OpenRead相关方法处理二进制数据流。

【编辑推荐】

  1. Windows Phone 7对比Android 平分秋色
  2. 多图详解 Windows Phone 7功能升级过程
  3. 把Windows Mobile换成Windows Phone 7的5大原因
  4. 移动应用三法则:3LM欲开辟Android企业级市场
  5. Windows Phone 7破坏了.NET语言的协同发展?
责任编辑:佚名 来源: infoq
相关推荐

2010-11-03 15:10:04

SilverlightSilverlightWindows Pho

2011-04-08 10:02:06

日历Windows Pho

2011-12-06 10:45:16

云计算应用Windows Pho

2011-12-03 20:03:26

iPhone

2013-07-30 11:18:37

Windows PhoWindows Pho

2011-03-21 09:05:40

IronRubyWindows Pho

2011-06-07 11:35:38

Windows Pho

2012-08-16 10:35:50

Windows Pho

2010-12-14 18:48:49

微软

2010-12-01 09:01:31

独立存储Windows Pho

2010-08-10 11:11:31

2011-08-09 10:42:24

微软Windows Pho

2010-10-25 13:21:17

Windows PhoMarketplace

2013-07-30 11:02:55

Windows PhoWindows Pho

2012-03-04 20:47:38

Windows Pho

2010-04-08 17:40:23

Windows Pho

2010-08-05 17:28:59

Windows PhoHTML 5

2010-08-13 08:21:11

Windows Pho

2010-03-09 10:51:15

Windows Pho

2010-04-26 13:48:17

iPhone OSiOSWindows Pho
点赞
收藏

51CTO技术栈公众号