NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

架构实战营-模块一作业

rubys_

架构实战营

从零开始搭建一个个人博客网站--Task0

IT蜗壳-Tango

django IT蜗壳教学 6月日更 Datawhale

这可能是介绍Android UvcCamera最详细的文章了

小驰笔记

android 音视频 UvcCamera 引航计划

【Vue2.x 源码学习】第十三篇 - 生成 ast 语法树 - 正则说明

Brave

源码 vue2 6月日更

【经验分享】RTC 技术系列之视频编解码

Hanson

音视频

算法之统计岛屿数量

Skysper

算法 深度优先搜索

ES2021 带来的新特性

KooFE

JavaScript 6月日更 ES2021

HarmonyOS的万里长征和万里长城

脑极体

五种服务部署升级策略,你也许会用的到

架构精进之路

6月日更 服务升级

Git 各指令的本质,真是通俗易懂啊

xcbeyond

6月日更

Kubernetes手记(10)- POD 存储卷

雪雷

k8s 6月日更

「SQL数据分析系列」2. 创建和使用数据库

数据与智能

数据库 语法

中国数字化转型为全球带来机遇

CECBC

【21-6】PushGateway快速上手

耳东@Erdong

Prometheus 6月日更 PushGateway

产品开发的过程

Qien Z.

运营管理 6月日更

架构实战营模块6作业

梦寐凯旋

#架构实战营

网络攻防学习笔记 Day44

穿过生命散发芬芳

网络攻防 6月日更

🍃【SpringBoot技术专题】「StateMachine」FSM状态机设计及实现

洛神灬殇

springboot 6月日更 状态机 StateMachine

☕【JVM技术探索】重塑虚拟机性能调优计划

洛神灬殇

JVM jvm调优 GC调优 6月日更

JavaScript学习(二)

空城机

JavaScript 大前端 6月日更

Single-Spa构建第一个微前端项目

devpoint

Vue 大前端 6月日更

【音视频】基于声网的多人视频通话功能建设

轻口味

android 音视频 IM 声网

架构实战营 - 模块 6- 作业

请弄脏我的身体

架构实战营

MySQL基础之十一:创建表

打工人!

MySQL 6月日更

新手讲解this

前端树洞

JavaScript 面试 大前端 js

模块6作业

薛定谔的指南针

架构实战营

《原则》(十三)

Changing Lin

6月日更

CSS 选择器总结

编程三昧

CSS html5 大前端 DIV+CSS CSS选择器

nacos配置中心模块详解

捉虫大师

nacos 配置中心

(VMware)ubuntu 环境下搭建docker环境

逸少

Docker Docker-compose vmware Ubuntu20.04

LeetCode 每日一题「判定字符是否唯一」

陈皮的JavaLib

Java 算法 LeetCode

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