來自iOS或者是Android平台的應用程序開發者們應該會對WP7、iOS以及Android之間的相似點和不同點比較感興趣。因此我們在接下來的小節中將會從它們的體系結構角度來展示三個主要的移動操作系統之間的異同點。
操作系統
在撰寫本書時,iPhone主要經歷了4代操作系統[1]。早期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 系統級別比較
項 目 |
iOS |
Android |
WP7 |
內核 |
Mac OS X的Mach內核 |
Linux內核 |
Windows CE 6 |
支持的CPU架構 |
ARM |
ARM、X86 |
ARM |
內存模型 |
分頁,沒有基於磁盤的備份存儲 |
分頁,可選的SD卡交換區 |
分頁,沒有交換區 |
操作系統底層內存管理 |
有 |
有 |
有 |
管理運行時 |
無 |
Dalvik Java運行時 |
.NET框架公共語言運行時(CLR) |
應用程序沙盒 |
有 |
有 |
有 |
跨應用程序通信 |
有限的,使用自定義的URL |
Intent、廣播接收器、內容提供器和服務 |
啟動器和選擇器 |
應用程序框架
深入理解這三個主要的手機操作系統之間在應用程序框架上的不同,對於開發跨平台的應用程序是至關重要的。
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 應用程序框架比較
項 目 |
iOS |
Android |
WP7 |
可用的應用程序框架 |
Cocoa Touch |
Android框架 |
Silverlight和XNA |
編程語言 |
Objective-C(擴展C的面向對象編程語言) |
Java |
.NET語言(C#和Visual Basic.NET) |
原生API訪問 |
允許 |
允許,通過JNI使用NDK |
不允許 |
SDK(軟件開發工具包) |
Mac OS X上的iOS SDK |
Windows、Linux和Mac OS X上的Android SDK |
Windows 7上的Windows Phone SDK |
集成開發環境 |
Xcode |
Eclipse(使用ADT插件) |
Visual Studio 2010或Visual Studio 2010 Express |
用戶界面定義 |
NIB資源文件 |
Widgets(小工具)和布局 |
XAML |
用戶事件機制 |
Delegate(委托) |
在View(視圖)類事件里的事件監聽器 |
在CLR(公共語言運行時)里的事件處理函數 |
一些開發者們也許希望能夠使用C#和Visual Studio等工具來開發Android和iOS上的移動應用程序。這樣能使跨平台的設計更加容易,並且能在這些平台上重復使用已有的代碼。為此,已經有一些相關的工具能夠達到這個目的,如Mono-Android (http://mono-android. net/)和Monotouch (http://monotouch.net/)。
應用程序上架過程
蘋果公司的在線軟件商店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 應用程序商店處理流程
項 目 |
蘋果App Store |
Android Market |
Windows Phone Marketplace |
注冊費用 |
個人每年99美元,企業每年299美元 |
一次性25美元 |
每年99美元,包括可以免費提交5個應用程序 |
應用程序提交費用 |
無 |
無 |
免費應用程序提交需要19.99美元;付費應用程序提交需要99美元 |
收益分享(公司/開發者)比例 |
70/30 |
70/30 |
70/30 |
可用的區域 |
世界范圍,特定國家商店 |
免費應用程序可以在任何地方訪問,付費應用程序各不相同 |
17個國家和地區,包括一些歐洲國家、澳大利亞、中國香港、印度、新加坡、美國 |
內容政策 |
有 |
有 |
有 |
在真實設備上的測試 |
有 |
無 |
有 |
性能要求 |
無 |
無 |
有 |
項 目 |
蘋果App Store |
Android Market |
Windows Phone Marketplace |
應用程序返回退款 |
有 |
有,在購買后的15分鍾 |
無 |
先試后買 |
無 |
無 |
有 |
本文節選自《Windows Phone編程精要:iOS、Android開發者必讀》一書。
《Windows Phone編程精要:iOS、Android開發者必讀》一書已由電子工業出版社正式出版,本書由[美]Zhinan Zhou(周稚楠) Robert Zhu(朱渝) Pei Zheng(鄭沛) Baijian Yang(楊柏健) 著 王仲遠 譯