写点什么

基于.NET/C#开发跨平台 Windows Phone 7、iPhone 及 Android 应用程序

  • 2010-10-28
  • 本文字数:1850 字

    阅读完需:约 6 分钟

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

使用 MonoTouch,.NET/C#程序员可以利用现有的知识进行开发,能够使用反射、泛型、LINQ、Lambda 等各种高级的.NET/C#特性。面向原生 API 的绑定存放在 monotouch.dll 中的 MonoTouch 命名空间下,并与 CocoaTouch(即用于 iOS 开发的原生 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 及 WP7 上的游戏向 iOS 上的移植工作。不过在复用时并不能共享二进制文件,而必须针对不同的平台重新编译代码。

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

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

复制代码
void SaveLocal(string data)
{
<strong>#if (MonoTouch || MonoDroid)</strong>
File.WriteAllText(_localPath, data);
<strong>#elif WINDOWS_PHONE</strong>
using (var appStorage =
IsolatedStorageFile.GetUserStoreForApplication())
{
var file = appStorage.OpenFile(_localPath, FileMode.Create);
FileExtension.WriteAllText(file, data);
}
<strong>#endif</strong>
}

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

Chris 在演讲中演示了一个跨平台的 Twitter 应用程序的开发过程,您可以在他的博客上访问WP 7 和MonoDroid 的开发录像,以及完整的幻灯片内容。Chris 与他人还合著了一本讲解 MonoTouch 开发的书籍。此外,在国内技术社区也有关于 MonoTouch 的内容,如老赵在博客上描述了在虚拟机中安装 Mac OSX 雪豹操作系统以及利用 Visual Studio 开发 MonoTouch 应用程序的方式(上)。

2010-10-28 02:546226
用户头像

发布了 157 篇内容, 共 59.2 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

python 之 「奶茶名字」的词云展示

小匚

Python python 爬虫 python教程

我们有来生吗?

Janenesome

读书 碎碎念 猎奇

一次生产事故导致系统崩溃的原因排查过程

hellocj

JAVA 程序展示时间与数据表保存的时间相差了 13 个小时!

我不自豪谁志豪

MySQL 学习 后端

聊聊我的程序员下属

程序员干货站

Python 人工智能 程序员 程序人生

利用goaccess分析nginx日志

Megatron7

nginx Linux

pip 配置路径要死记硬背?

风起帆扬了

Python Linux windows pip

字节流(InputStream/OutputStream)

Howe

Java 工作流

《零基础学Java》 FAQ 之 1-HelloWorld程序发生了ClassNotFound错误怎么解决

臧萌

Java Hello World !

Kubernetes 将迎来首个 LTS 版本

倪朋飞

Kubernetes 容器 微服务

Java并发编程基础--volatile

Java收录阁

volatile 线程

Redis学习笔记(字符串类型)

编程随想曲

redis

书籍推荐

蛤蟆先生

读书

七大查找算法,面试考试皆可用

我不自豪谁志豪

Java 面试 算法

Bash 的4种运行模式

Megatron7

bash Linux DevOps Shell

理解 KL 散度的近似

Neil

人工智能 学习 Deep learning Machine Learning

回"疫"录(8):我怀疑我病了

小天同学

疫情 心理 回忆录 现实纪录 纪实

如何在“写作平台”做一个读者

小天同学

思考 写作平台 建议 读者 阅读量

低代码是什么鬼

Jeff Kit

低代码 全栈 开发

面试考试可用,十大排序算法

我不自豪谁志豪

学习 面试 算法

《零基础学Java》 FAQ 之 2-Java版本那点事儿

臧萌

Java

Flutter引擎源码解读-内存管理篇

Geek_70xtik

flutter ios android 跨平台 dart

1分钟系列-Elastic Stack(ELK)简介

Yezhiwei

Logstash Kibana ELK

一次线上服务高 CPU 占用优化实践

挖坑的张师傅

性能优化 JVM cpu

取舍与可测试

孙苏勇

产品 产品设计 产品开发

乞丐版英制单位转换

escray

学习 CSD 认证实战营

快捷考勤打卡设置

Megatron7

ios

Graylog部署文档

勤而行之

Linux 开源 工具 日志分析

maven私服搭建

kcnf

maven

有节制的设计

胖鱼2号

微信 设计 無印良品

程序员大佬怎么跳槽?

程序员干货站

Python 人工智能 程序员 后端

基于.NET/C#开发跨平台Windows Phone 7、iPhone及Android应用程序_.NET_赵劼_InfoQ精选文章