50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

基于.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:546423
用户头像

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

关注

评论

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

Dubbo 并发控制

青年IT男

dubbo

Hibernate的get和load区别学习笔记

风翱

hibernate 5月日更

2021金三银四Java岗大厂面试经验总结(附面试真题)

北游学Java

Java 面试

浅谈前端异常监控平台实现方案

devpoint

异常处理 indexedDB leveldb

5分钟速读之Rust权威指南(五)

wzx

rust

520 属于程序员的诗

荩沫

520单身福利

GraalVM系列(三):GraalJS多线程实践

孤岛旭日

GraalVM

Node.js学习 —— 简介

空城机

JavaScript 大前端 Node 5月日更

作业二:分析微信朋友圈高性能复杂度

刘丽

架构训练营

中台反思:提质增效

孤岛旭日

效率 中台 企业中台

网络攻防学习笔记 Day19

穿过生命散发芬芳

5月日更 网络攻防

生态“群海”:数字化转型的供需之变

脑极体

中台反思:技术中台的未来

孤岛旭日

中台 低代码 中台架构

IDEA 这么设置 Maven,再也不用担心依赖下载失败了

楼下小黑哥

Java IDEA

数据挖掘从入门到放弃(六):K-means 聚类

数据社

机器学习 5月日更

北京市级预付费资金监管平台正式上线试运行 内嵌区块链存证技术

CECBC

大话Java异常

若尘

Java 异常 异常处理 520单身福利

GraalVM系列(二):GraalVM核心特性实践

孤岛旭日

GraalVM

区块链与资产数字化

CECBC

实现私域流量的长效积累,一场医美直播背后的数字营销密码

脑极体

中台反思:技术中台设计架构

孤岛旭日

中台 企业中台 技术中台

人工智能基础2 - DAY10

Qien Z.

人工智能 基础 5月日更

【干货分享】开放原子超级链动态内核XuperCore核心技术揭秘

百度开发者中心

区块链 超级链

毫秒级的竞技PK | 电信行业需要的5G速度

VoltDB

大数据 数据分析 5G 实时计算

【签约计划】试用期名单公布

InfoQ写作社区官方

签约计划 热门活动

如何制定战略?

石云升

创业 战略 职场经验 5月日更

分布式架构的根基:深入浅出一致性算法

孤岛旭日

分布式 一致性算法 PAXOS 共识算法

浪潮“分布式云+”行动计划持续深化 三大产品正式发布

云计算

平台化服务的基石(四):再议用户权限,更优雅的模型

孤岛旭日

用户权限 企业建模

闲言碎语:为什么阿里做不好业务中台

孤岛旭日

520单身福利|女朋友又找我要礼物

孙叫兽

程序员 520单身福利 520 单身福利

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