65.9K
CodeProject 正在变化。 阅读更多。
Home

跨平台移动开发技术的介绍

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (15投票s)

2012年5月21日

CPOL

5分钟阅读

viewsIcon

96090

智能手机和平板电脑日益普及,移动应用也随之而来。但设备的多样化对于进入市场的开发者意味着什么?您是只针对单一平台,为 iOS 和 Android 构建您的应用程序两次,还是使用跨平台框架?

引言

智能手机和平板电脑日益普及,移动应用也随之而来。但设备的多样化对于进入市场的开发者意味着什么?您是只针对单一平台,为 iOS 和 Android 构建您的应用程序两次,还是使用跨平台框架?

这里有一些历史,以及对当前市场上不同技术的概述

首先,有了 iPhone

iPhone 之前就有智能手机,也有移动应用。Windows CE 于 1996 年首次发布,但苹果的 iPhone(于 2007 年推出)才真正标志着智能手机时代的开始。

最初,iPhone 不允许安装第三方原生代码应用程序;开发者想要添加自己的内容,必须使用运行在手机浏览器中的 HTML Web 应用。有一些扩展可以使这些应用程序看起来像苹果的应用程序而不是网页,但对硬件的访问是有限的。

2008 年,App Store 出现,开发者有机会使用 Objective C 开发原生应用。但这并非没有限制:开发需要 Mac、Xcode,并且只能使用 API 的文档化部分。生成的应用程序必须经过审核才能发布。

然而,iPhone 在这个阶段的主导地位意味着移动开发者实际上只需要针对一个平台、一个设备和一个非常小范围的操作系统版本。

然后是 Android。无数的 Android!

Android 平台成立于 2003 年,于 2005 年被 Google 收购,并于 2008 年推出了第一款手机。自原始的 G1 以来,Android 平台上的设备数量爆炸式增长。事实上,维基百科目前列出了近 100 款此类设备,由 30 多个制造商生产。

Android 设备现在在全球智能手机销售中占据超过 50% 的份额(Gartner,2012 年第一季度),但是,与 iPhone 不同的是,几乎所有方面都存在巨大差异:屏幕尺寸、分辨率、处理器速度、内存、功能和操作系统版本。

突然之间,开发一个可以在(几乎)任何地方运行的单一应用程序的想法变得更难实现——但这个想法仍然和以往一样有吸引力。

解决方案 #1:跨平台编译器

这些有各种形式。最低级别是 C 编译器,链接到各种平台 SDK。您使用一种通用语言,但 API 却大相径庭。

值得庆幸的是,也有更高层次的选择:Appcelerator 的 Titanium 平台将 JavaScript 代码编译成原生应用程序,并将其链接到其平台无关的 SDK。Xamarin 提供一个针对 Android (MonoDroid) 和 iOS (MonoTouch) 的 C# 编译器。

这些(以及其他类似的)平台提供了一种通用语言,但仍然需要为多个设备进行编译。

解决方案 #2:HTML 5 Web 应用

借助 HTML 5,运行在 Web 浏览器中的代码能够提供日益丰富的客户端体验:本地存储、地理位置、音频和视频、离线工作、加速图形操作等。应用程序和网站之间的区别无疑变得更加模糊。

这里的一个绝佳例子是 Amazon 的 Kindle Web 应用在 iOS 上:由于 App Store 政策的变化,他们选择了一个纯 HTML5 应用,同时仍然允许用户下载内容供以后使用,并保持出色的用户体验。

这里的一个缺点更多是社交性质而非技术性质:许多人现在期望应用程序出现在应用商店中,并习惯了与其选择的平台相关的发现和安装过程。可用的 API 以及可以本地存储的数据量仍然存在一些限制。

解决方案 #3:HTML5 混合应用

另一个解决方案是使用 HTML5、JavaScript 和通常一些额外的库的组合来开发您的应用程序,然后将其包装在一个相对轻薄的原生代码包装器中。

与前面两种方法相比,这种方法的优势在于它结合了 HTML5 和原生应用程序的优点:有通用的开发语言,所有支持平台的通用 API 集,以及比纯 HTML 5 Web 应用更强的设备访问能力。本地存储可以超过 5MB 的限制,可以上传本地设备的照片,(在某些平台上)可以运行后台服务等等。

该领域的领导者是 PhoneGap 框架——现已捐赠给 Apache 软件基金会作为一个开源项目,并更名为Apache Cordova。Cordova 为 Android、iOS、BlackBerry 和 Windows Phone 提供特定平台的包装器,并公开一个平台无关的 API,供 JavaScript 代码使用。

Web 开发技能现在同样适用于移动应用程序——相同的语言、相同的设计流程、相同的技术。

然而,最后的障碍是构建过程。要将应用程序编译成原生包装器,您仍然需要每个平台的 SDK。但这并不像听起来那么容易:iOS 需要 Mac,Windows Phone 需要 Windows PC,而设置 Android SDK 通常不是最顺畅的体验。

引入托管构建服务...

如果混合应用开发的想法很有吸引力,但设置成本和工作量却不吸引人,那么托管构建服务可能是正确的答案。

如果 Dreamweaver 是您的世界,Adobe 已将 PhoneGap Build 服务集成到其新的Creative Cloud 产品中。如果您更倾向于开发,Red Gate 的 Nomad 允许您在 Microsoft Visual Studio 中工作,然后将您的代码发送到其基于云的构建服务。构建完成后,您将获得原生的 iOS 和 Android 应用程序,可在您的设备上使用——无需 Mac。

值得注意的是(无论您使用哪种解决方案),要构建适用于 iOS App Store 的应用程序,您仍然需要成为Apple iOS 开发者计划的会员,该计划每年收费 99 美元。

那么原生开发就死了吗?

绝对不是。有一类应用程序无法使用混合或跨平台技术构建:从低级实用程序(例如 Android 上出色的 Tasker 应用),到高性能游戏(尽管 Canvas 提供的图形性能一直在改进),再到那些与平台 SDK 的某些部分或您的首选跨平台框架中未提供的外围设备进行通信的应用。

但是,对于 90% 的应用程序来说,请考虑您是否真的应该将时间花在设置多个开发环境、用几种不同的、不熟悉的语言重新开发您的应用程序上,或者您是否可以使用一个了不起的社区已经为您完成的工作。

© . All rights reserved.