【IT168评论】来自iOS或者是Android平台的应用程序开发者们应该会对WP7、iOS以及Android之间的相似点和不同点比较感兴趣。因此我们在接下来的小节中将会从它们的体系结构角度来展示三个主要的移动操作系统之间的异同点。
三大操作系统概述
在撰写本文时,iPhone主要经历了4代操作系统。早期iPhone的模块使用了三星公司的处理器,直到iPhone 4才使用了苹果公司自己的处理器A4。前四代所有的iPhone都使用的是3.5寸的显示屏。iPhone 4拥有512MB内存和16GB/32GB的存储容量。所有的iPhone都装备了GPS、Wi-Fi以及蓝牙连接模块。
苹果公司的iOS系统实际上是从Mac OS X操作系统中派生出来的。Mac OS X是苹果公司为其Mac机(Macintosh)所开发的桌面操作系统。它实际上是一个以UNIX为基础,联合了Mach微内核以及众多来自FreeBSD[2]和NetBSD组件的操作系统。iOS使用了与Mac OS X相同的操作系统核心组件,并且苹果公司针对各种移动设备如iPhone、iPod touch和iPad做了一些特殊的优化,以改进其性能、稳定性和电池使用寿命。iOS的架构包括4层(自下而上):核心操作系统层(core OS layer)、核心服务层(core service layer)、媒体层(media layer)和可轻触层(Cocoa Touch layer)。iOS的应用程序是使用iOS软件开发工具包和Xcode开发环境,并使用扩展C的面向对象编程语言(Objective-C)编写的原生应用程序。
Android设备的硬件选择可以更加多样,因为Google并没有定义相应的硬件标准(而微软的WP7定义了一组所需的硬件标准)。总体而言,Android的手机,就像其他手机一样,包括了语音通话、数据通信、相机、GPS(全球定位系统)、Wi-Fi、蓝牙以及一些传感器(如加速度传感器和距离传感器)。在不同的设备上,其屏幕大小也是多种多样的,虽然大部分的情况下都使用的是3.5英寸和4英寸的屏幕。
Android设备软件的核心实际上是Linux内核。驱动以及硬件抽象层模块全都是基于Linux的。在Linux内核之上是Dalvik虚拟机以及它的运行环境,此外还包括一些原生库和服务。Dalvik是一种特殊的Java虚拟机,它针对Java应用程序在移动设备上的运行做了特殊的优化。Android操作系统最主要的一个部分是其应用程序框架,它由Java服务、应用程序编程接口、公共运行库、原生库和原生服务组成。图1-3展示了其中的具体细节(来源:http://developer. android.com/guide/basics/what-is-android.html)。
▲图1-3 Android体系结构
在Android上开发应用程序有两种选择:(1)完全运行在Dalvik虚拟机上的Java应用程序;(2)使用JNI(Java本地调用)调用原生库的Java应用程序。你也许会好奇为何Android开发者能够直接调用原生库?其实这主要是从性能上进行考虑的。因为通常原生代码能够提供比Java字节码(或者由Dalvik虚拟机产生的16进制代码)更好的性能。而这对于CPU密集型(CPU Intensive)的代码以及媒体处理代码而言是相当重要的。此外,当开发者打算从别的平台上移植C/C++代码的时候,如果能够将现有代码包装成原生库进行调用,要远比将其移植成Java代码要方便许多。
在WP7上,开发者是不允许编写原生代码的,他们只能编写托管代码。此外,WP7上只支持Silverlight和XNA编程接口的一个子集。然而,手机制造商们实际上是有途径可以将一部分的原生代码嵌入WP7的系统中的,并且在他们的应用程序中使用COM(组件对象模型)的互操作。微软提供给手机制造商们的软件开发工具包(SDK)与提供给一般开发者们的软件开发工具包是不同的,所以手机制造商们可以利用一些有限的Windows CE API来开发原生的COM DLL,并且在他们自己的应用程序中使用这些COM DLL。而这些COM DLL实际上可以看做是整个操作系统的一部分。不幸的是,一般的手机开发者们是无法访问到这个特殊的提供给手机制造商们的软件开发工具包的。
表1-1列出了这三个主要手机操作系统之间在系统级别的比较。
表1-1 系统级别比较
${PageNumber}应用程序框架
深入理解这三个主要的手机操作系统之间在应用程序框架上的不同,对于开发跨平台的应用程序是至关重要的。
iOS的应用程序是构建在可轻触层(Cocoa Touch layer)之上的,该层包含了一组扩展C的面向对象编程框架,如UIKit(用户界面工具包)、Game Kit(游戏工具包)、Map Kit(地图工具包)和 iAd等。可轻触层为应用程序和窗口提供了一组丰富的用户界面对象和事件处理机制,此外,媒体层和核心服务层也提供了一些媒体服务及核心系统服务。虽然开发者们能够直接调用媒体层和核心层所提供的一些服务,以便为他们的特定服务提供更加细粒度的控制,但是通常情况下,开发者们只须使用由可轻触层所提供的各项功能和方法即可。
类似的,Android的Java应用程序是构建在Android框架上的,这个框架由一组Java程序包(Java packages)组成,包括Activity Manager(活动管理器)、View System(视图系统)、Windows Manager(窗口管理器)、Telephony Manager(电话管理器)、Content Provider(内容提供器)、Notification Manager(通知管理器)等。Android的用户界面是在一个布局组合里,由一组视图组件构成。这个框架下的Java程序包是访问那些基本系统功能的接口,它们本身又是依赖于更加底层的原生库来执行这些最基本的任务。开发者们也能够直接将一些原生库嵌入到他们自己的Java程序中。不过,在Java代码和这些原生代码之间的交互,需要在JNI框架内完成。Android系统还介绍了一些独特的编程概念,如Activity(活动)和Intents(意图),这使得扩展系统程序和服务更加容易。
WP7的应用程序框架是基于.NET的,并且你无法使用原生代码(在本章的“局限性和发展路线图”小节中已经讨论过)。Silverlight和XNA都提供了一组.NET框架下的接口来访问那些基本的操作系统功能。此外,应用程序还可以通过标准的Windows Phone应用程序编程接口与媒体、本地和远程数据、传感器、位置信息以及手机相关信息进行交互。每个程序都会在一个独立的.NET沙盒中独立运行。这个沙盒的使用意味着在WP7上不允许在各个程序之间进行通信,也意味着如果开发者只能通过Web Service(web服务)作为程序之间通信的桥梁。
表1-2展示了这三个平台在应用程序框架上的一些异同点。
表1-2 应用程序框架比较
一些开发者们也许希望能够使用C#和Visual Studio等工具来开发Android和iOS上的移动应用程序。这样能使跨平台的设计更加容易,并且能在这些平台上重复使用已有的代码。为此,已经有一些相关的工具能够达到这个目的,如Mono-Android (http://mono-android. net/)和Monotouch (http://monotouch.net/)。
${PageNumber}应用程序上架过程
苹果公司的在线软件商店App Store是第一个移动应用程序商店,并且在本书撰写之时拥有的软件数量最多。然而,许多移动应用程序开发者质疑苹果公司的应用程序审核流程,因为苹果公司强加了许许多多的限制条件,并且因常常莫名其妙地拒绝一些应用程序而闻名。开发者们提交的每一个iOS的应用程序都需要通过一组政策验证,包括功能性政策、内容政策和法律政策。通常,这一过程需要数天甚至几个星期的时间。
Android的应用程序商店的成长也非常迅速,这是由于在2009年至2010年期间,Android设备出货量急剧增长。例如,在2010年10月,Google宣布每天有多达30万台的Android设备激活(http://mashable.com/2010/12/09/android-device-stats-2010)。Android的应用程序商店有一些强制性的内容政策,例如,不允许攻击性语言、裸体、性相关资源以及侵权行为。与苹果公司的应用程序商店相比,Android的应用程序商店显得更加开放——它不会对开发者所提交的应用程序进行任何验证。基本上来说,开发者只须简单地注册一个账户,上传一个应用程序,并且简单地对其做一些描述,就能使这个应用程序出现在Android的应用程序商店中了。Google会有一个专门的团队来处理那些关于某些程序违反内容政策的报告,并且如果需要的话,这个团队会将相应的应用程序从Android应用程序商店中移除。
苹果公司iOS的内容管理政策相关页面:developer.apple.com/appstore/ guidelines.html
Google Android平台的内容管理政策相关页面:www.android.com/us/ developer-content-policy.html
微软公司最早是从Windows Mobile 6.5开始提供移动应用程序商店的。但是这样的努力并没有太多的成效,一个主要原因是Windows Mobile操作系统开始逐步丧失市场份额。而作为新的Windows Phone项目发布的一个组成部分,微软重新设计了Windows Phone应用程序商店,以期望能够与另外两个竞争对手一决高下。而且,微软似乎也从苹果公司的应用程序商店以及Android的应用程序商店里汲取了不少经验,因而制定了一整套相当全面的应用程序验证流程,以检测每一个提交的应用程序是否违反了政策上和技术上的一些要求,以保证每个应用程序的稳定性、有效地使用资源、不会影响设备的其他功能以及不是一个恶意软件。这套应用程序验证流程包括了静态的和动态的测试,测试内容包括应用程序各项接口使用、稳定性、性能等。整个流程大概需要数周时间。
表1-3展示了三个平台应用程序上架流程的比较。
表1-3 应用程序商店处理流程
本文节选自《Windows Phone编程精要:iOS、Android开发者必读》一书。
《Windows Phone编程精要:iOS、Android开发者必读》一书已由电子工业出版社正式出版,本书由[美]Zhinan Zhou(周稚楠) Robert Zhu(朱渝) Pei Zheng(郑沛) Baijian Yang(杨柏健) 著,王仲远译。