當今的人們可以無處不在,無時無刻地享受互聯網所帶來的便利。承載這些便利的智能化手機平臺也日趨成熟。在這個競爭激烈,硝煙四起的領域,iPhone一直以簡單實用來又酷勁十足的特點來吸引消費者,從而占據一席之地。而Android作為一個年紀輕輕而前途未卜的新興平臺,卻已經向世人展示了它非凡的潛力和巨大的生命力。
他們共同的特點各自都有一個強大的軟件商店,上面有來自全世界的開發者為iPhone和Android開發的數萬種乃至十萬種軟件,甚至可以說 iPhone和Android已經成為一個新興的軟件出版和流通平臺。近期太平洋企業頻道將對其上較有代表性的一些軟件和開發者的故事逐一介紹,敬請關注。本文先對iPhone和Android的開發平臺和開發環境作一個鋪墊性的介紹。
iPhone OS
iPhone OS平臺的建立使用了與創建Mac OS X操作系統一樣的技術,很多開發工具和技術都是來源于Mac OS X的。但是盡管這些工具與Mac OS X極為相似,但是iPhone OS的應用程序開發者并不需要具備Mac OS X的開發經驗。iPhone軟件開發工具包(SDK)將會為開發者提供其所需要的一切。下面將會一一介紹。
iPhone OS是一個在iPhone和iPod觸屏設備上運行的操作系統。該操作系統在管理設備硬件的同時,也提供在移動電話上實現本機應用程序的基本技術。根據是安裝在iPhone還是iPod Touch上,這個操作系統會相應地植入一些特定的服務應用程序,如電話,郵件,Safari瀏覽器等,來為用戶提供標準的系統服務。
iPhone OS是iPhone手機和iPod觸屏設備的核心
1. iPhone OS的體系結構
iPhone OS體系結構與Mac OS X的基礎架構極其類似。在iPhone OS體系的上層,它充當了iPhone和iPod Touch硬件設備同在電話屏幕上顯示的應用程序之間的媒介,如下圖所示。開發者自己創建的應用程序不會直接與硬件進行交互,而是與相對應的驅動器進行連接。這樣的做法可以消除開發者應用程序在不經意間改變了底層的硬件設備的危險。
iPhone OS上的應用分層
iPhone OS使用一個極其直觀的軟件棧。在這個堆棧的底層是Mach內核和一些硬件驅動器,以此來管理所有程序的執行。凌駕于這一層之上其他層則是包括開發者用于開發所必須的核心技術和接口。盡管iPhone OS在內核和驅動級沒有任何接口,但是它在軟件棧的更上層卻為開發者設置了許多技術接口。
2. iPhone OS軟件棧
iPhone OS技術的實現過程可以劃分為多個層次,如下圖所示。這個系統的底層是所有應用程序的支柱——基礎服務。上層則包含了很多精密的服務和技術。
iPhone OS軟件棧
當開發者在編寫他們自己的代碼時,必須盡可能地使用上層框架而不是底層框架。上層框架為底層結構提供面向對象的抽象。這種抽象通常能簡化代碼的編寫工作。它可以大大地減少代碼的編寫量以及壓縮一些潛在的復雜性能,比如插口和線程。但是,盡管上層框架把底層技術都抽象化了,并不是表示這些技術將會被隱藏起來。底層框架依然還是適用于那些需要涉及那些不存在于上層框架中的模塊的開發者的。
1) Cocoa Touch層
Cocoa Touch是iPhone OS最重要的一層。它為開發者提供了實現應用程序所必須的基礎設施的關鍵框架。
在Cocoa Touch層,很多技術都是使用Objective-C語言實現的。這一層的框架為開發者的應用程序提供基礎設施。這些基礎框架主要是提供面向對象的支持,如文件管理,網絡操作等。Uikit框架為應用程序提供可視化的基礎設施,其中包括窗口類,視圖類和控制類以及管理這些對象的控制器。除此之外,這一層的其他框架(如Push Notification服務,地址簿用戶界面,App Email,Map Kit等)幫助開發者訪問用戶聯系人信息,圖片信息以及加速器和設備其他硬件的特性。
2) Media層
Media層是由多種圖表,音頻,視頻技術連接而成的,為移動設備營造最好的多媒體用戶體驗。更重要的是,這些技術都是針對降低開發者創建應用程序的工作量而設計的。iPhone OS的這一層框架令優質圖表的創建變得更加簡單,同時也加快了動畫制作的進程。
這一層所包含的技術能夠支持2D和3D繪圖,音頻模式和視頻模式,涵蓋了以C語言為基礎的技術(OpenGL ES, Quartz和Core Audio)。同時還具有Core Animation——一項先進的用Objective-C實現的動畫引擎。
3) Core Service層
Core Service為所有應用程序提供基本的系統服務。也許開發者并不需要直接使用這些服務,但是系統的許多模塊都是在其之上建立起來的。這一層包含了 iPhone OS的基本接口,主要用于文件訪問,底層數據類型的設定,Bonjour服務,網絡接口等。這些接口大部分是基于C語言實現的——Core Foundation, SQLite和XML支持等。
4) Core OS層
Core OS層包含了內核環境,驅動器和底層UNIX接口。其中,內核是基于Mach操作系統的,負責操作系統的所有作業。它管理虛擬內存系統,網絡和進程間的通信。驅動器則為可用的硬件設備和系統框架提供接口。這些接口也與Core Service層一樣,都是用C語言來實現的。
3. iPhone SDK
iPhone SDK包含了開發,安裝和運行客戶機本機應用程序的所有工具以及界面。本機應用程序是使用iPhone OS系統架構和Objective-C程序語言設計的,它們可以在iPhone OS上直接運行。不像Web應用程序,本機應用程序是直接安裝于設備上。因此,它的運行并不需要依賴于網絡連接。它們與系統的其他應用程序毗鄰而居。而且這些應用程序和所有的用戶數據都可以通過iTunes與用戶的計算機保持同步。
Apple將大部分的系統接口都收集在一個叫做框架(framework)的程序包中。一個framework包含了一個動態共享庫以及支持該庫的一些資源(如頭文件,圖片,幫助程序等)。使用 framework,應用程序開發人員可以將它內聯到開發工程內,從而使其得以訪問framework的特性,并指導開發工具去哪里查找頭文件和 framework的其他資源。
除了framework,Apple還在它的標準共享庫(Standard Shared Libraries)中提供其他技術。因為iPhone OS是基于UNIX的,所以構成操作系統的底層架構的技術都屬于開源代碼技術。這些技術的接口就儲存在標準庫以及接口目錄中。
iPhone SDK
用戶在iPhone設備上可以運行兩種客戶端應用程序:網絡應用程序和本機應用程序。網絡應用程序使用HTML,CSS和Javascript代碼來實現與網絡服務器的交互,并在互聯網上進行傳輸,在Safari網絡瀏覽器上進行顯示。本機應用程序,換句話說死直接安裝在設備上的,它們的運行并不需要網絡的鏈接。 iPhone SDK只支持創建那些顯示在設備主屏幕上的本機前端應用程序。它不能創建驅動程序,后端應用程序,框架和動態庫。如果開發人員想在自己的應用程序中整合進框架或者動態庫,則必須在創建工程時,將這些代碼靜態地與應用程序的可執行文件相互連接。
4. 開發工具
為iPhone OS設計應用程序,開發人員需要一臺Mac OS X計算機來運行Xcode工具。Xcode是Apple提供的一款設計工具,可以進行工程管理,代碼編輯,建立可執行文件,源代碼級調試,源代碼庫管理,性能調整等一系列操作。在這套開發工具中,Xcode應用程序是核心,它提供了基本的源代碼開發環境。但是它卻不是唯一的工具,下面將對開發iPhone OS軟件所需用到的關鍵應用程序做一介紹。
1) Xcode
Xcode是最關鍵,最基本的開發工具。它是一個集成開發環境(IDE),為開發者創建和管理iPhone工程和源文件提供所需的工具,并能夠生成可執行文件,可在iPhone模擬器或者正式設備上運行和調試。
Xcode的工程窗口
設計一個新的iPhone應用程序時,必須現在Xcode上創建一個新的工程。工程是用來管理與應用程序相關的所有信息,包括源文件,生成設置和將所有組建集成起來的方法。每一個Xcode工程最主要的是工程窗口,如下圖所示。這個窗口提供為該工程里所有關鍵組件提供快速訪問操作。在組列表和文件列表中,開發者可以管理工程所需的文件(源文件和目標文件)。工具條則羅列了一些常用的工具和命令符。詳細信息窗口方便開發者在設計的過程中隨時改變配置信息。工程窗口的其他部分則為開發者提供了設計工程的背景資料。
在Xcode中運行工程
2) 界面生成器(Interface Builder)
界面生成器是開發者用來為應用程序組裝用戶可視化界面的工具。使用界面生成器,開發者可以向應用程序窗口拖放預先配置好的組件。這些組件包括了基本的系統控制單元,如開關,文本和按鈕等,并用自定義視圖來代替應用程序提供的視圖。在開發者將組件拖入窗口后,可以拖動它們,隨意改變它們的位置,配置它們的屬性,并為這些對象和應用程序代碼間創建映射關系。如果界面設計的工作完成了,可以將其保存為一個nib文件(一種自定義資源文件模式)。
使用Interface Builder設計用戶可視化界面
這個nib文件保存了UIKit在應用程序運行時重新創建對象所需要的所有信息。UIKit會先將nib文件載入,并為其所保存的所有對象創建一個可執行的版本,按照在Interface Builder中配置的方式配置它們。它同樣會依照開發者在應用程序中指定的新對象與原有對象之間相互連接的方式進行兩者間的互聯。這種連接不但為代碼提供了指向nib文件中對象的指針,而且還提供了用戶操作與應用程序之間相互通訊的信息。
總的來說,使用Interface Builder可以為用戶界面的創建節省很多時間。由于Interface Builder是一個可視化的編輯器,開發者可以在運行時查看用戶界面的情況,所以消除了創建用戶界面的代碼編寫,配置和布局的工作,直觀方便。
3) Instruments and Shark
一個具有世界水平的iPhone應用程序必須提供一流的用戶體驗。這需要有最佳的用戶界面和最好的性能。iPhone提供的開發工具中還包括了強大的優化和分析工具——Instruments and Shark——來幫助開發者追蹤iPhone應用程序的性能瓶頸。Instruments在iPhone與計算機遠程連接時,實時地收集諸如磁盤,內存和 CPU使用情況等信息。這些信息會隨著追蹤時間的推移,形成一個可視化的圖表。方便開發者定位故障區域,深入定位到出錯的代碼行。當需要最快運行速度時,Shark使開發者可以在極小的時間間隔中對數據進行抽樣。
這些工具能夠保證開發者設計出來的應用程序具有最華麗的用戶界面,同時也令他們得到最滿意的用戶體驗。
Instruments and Shark
介紹了這么多iPhone開發的內容,現在可以轉入Android的介紹了。
Android
Android 是Google開發的基于Linux平臺的開源手機操作系統。它包括操作系統、用戶界面和應用程序 —— 移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業創新的專有權障礙。
1. Android平臺
隨著Android功能廣度的加深,很容易將Android與桌面操作系統相混淆。Android是一個建立于Linux內核之上的分層環境,并且它包含了非常豐富的功能。其用戶界面子系統包括了:窗口,視圖和編輯框、列表、下拉列表等的顯示部件。Android包括了一個建立在WebKit上面的嵌入式瀏覽器,與iPhone移動Safari瀏覽器相同的開源瀏覽器引擎。
Android擁有一系列健全的連接選項,如WiFi,藍牙和與GPRS,EDGE和3G等的無線連接。Android應用程序一項廣受歡迎的技術是它能與Google地圖連接,在一個特定的應用程序中直接顯示地址。支持基于位置的服務(像GPS)和照相功能。
移動應用程序的設計在圖表/多媒體以及數據存儲方式這兩大塊領域上一直都在努力追逐著桌面應用程序的步伐。Android戰勝了內置支持2D和3D 圖像的挑戰。而在數據存儲方面,也相應地減輕了負擔。因為Adroid平臺集成了流行的開源SQLite數據庫。下圖簡單地顯示了Android的軟件層。
Android軟件層
2. Android應用程序的體系架構
如前面所提及的,Android是在Linux內核上運行的。所以Android應用程序使用Java語言編寫,并在一臺虛擬機上運作。值得注意的是,這臺虛擬機不是Java虛擬機,而是Dalvik虛擬機——一種開源技術。每個Android應用程序都是Dalvik虛擬機的一個實例,反過來駐留在 Linux內核管理進程中,如下圖所示。
Dalvik虛擬機
一個Android應用程序一般會包括下面一個或者多個分類:
1) 活動(Activities)
一個帶有可視化用戶界面的應用程序通常都是通過一個活動來實現的。當用戶在主屏幕或者應用程序啟動器上選擇了一個應用程序,那么一個活動就被激活。
2) 服務(Services)
服務是指那些需要長期運行的應用程序,如網絡監控或者更新檢測應用程序。
3) 內容提供者(Content Providers)
可以將Content Providers想象成為一個數據庫服務器。一個Content Providers的工作室管理數據的存儲,比如一個SQLite數據庫。如果應用程序很簡單,那么開發者也許就不需要開設一個Content Providers。但是如果應用程序很巨大或者其功能是使數據可用于多線程活動或者應用,那么一個Content Providers就是訪問數據的工具。
4) 廣播接收機(Broadcast Receivers)
一個Android應用程序也許會被用來處理進程中的數據元素,或者相應一個事件,比如文本消息的接收。一個Android應用程序通常會連同一個名為 AndroidManifest.xml的文件一起被配置進一個設備中。這個AndroidManifest.xml文件包含了正確安裝該應用程序的所有配置信息。具體內容有類名和應用程序能夠處理的事件的類型以及應用程序運行時所需的權限。打個比方,如果一個應用程序需要連接網絡來下載個文件,這個操作的權限必須明確記載在清單文件中。這種聲明性的安全措施有助于減少惡性軟件對用戶設備的傷害。
3. Android SDK和開發工具
開發Android應用程序最簡單的方法就是下載Android軟件開發工具包(SDK)和Eclipse IDE。Android應用程序可以在Microsoft Windows,Mac OS X或者Linux應用程序上進行開發。
Android應用程序是使用Java程序語言進行編寫的,但卻在一臺非Java虛擬機——Dalvik虛擬機上進行編譯和執行。在Eclipse中編寫Java語言是非常直觀的。Eclipse提供了一個豐富的Java環境,包括上下文幫助和代碼提示。一旦應用程序編譯通過,Android開發工具就能確保無誤地對該應用程序進行打包,包括AndroidManifest.xml文件。
Android SDK是以壓縮包的形式存放在開發者的硬盤驅動上的。其包括:
1) android.jar
Java歸檔文件包括了開發應用程序所需的Android SDK的所有類。
2) documention.html和docs目錄
SDK文檔大部分都是JavaDocs形式,這樣可以令用戶更加容易導航SDK中的程序包。該文件還含有一份高級開發指南和與Android社區的連接。
3) 樣本目錄(Samples directory)
樣本子目錄中包含了各種各樣常用應用程序完整的源代碼,譬如ApiDemo,演示了很多APIs。實例應用程序大大地減輕開發者的工作量。
4) 工具目錄(Tools directory)
包含了構建Android應用程序所需的全部命令行工具。最常用以及最有用的工具是adb utility(Andriod調試橋,Android Debug Bridge)。
adb utility支持多種可選的命令行參數,提供強大的功能,如從設備中復制文件。Shell命令行參數令開發者可以直接與手機連接,執行基本的shell命令。下圖顯示了通過Shell命令來對一臺用USB接口連接到Windows筆記本的真實機器進行操作。
使用adb shell命令行
在這個shell應用環境中,開發者可以:
顯示網絡配置:里面有多個網絡連接。注意到不同的網絡連接顯示的不同:lo是本地連接或本地環回連接;tiwlan0是WiFi與本地DHCP服務器提供的地址之間的連接。
顯示了PATH環境變量的內容。
執行su命令,成為高級用戶。
把目錄更改為/data/app。概目錄是用于存放用戶應用程序的。
發出一條Ping命令,查看Google.com是否可用。
在這個命令提示符環境中還可以與SQLite數據庫進行互動,打開程序和進行其他系統級任務。
5) usb_driver
該目錄包含了連接開發環境與Android設備(G1或者Android Dev1鎖定開發手機)的必須驅動。這些文件只適用于那些在Windows平臺上開發程序的開發人員。
設計好的Android應用程序可以在一臺真實的設備上運行,或者在Andriod SDK集成的Andriod模擬器上運行。 Android SDK開發環境和Andriod模擬器
總結
iPhone和Android都是從互聯網出身,其運營公司對于互聯網的共享精神有著更深入的了解,所以都可以在智能化手機平臺這場大戰中有所作為。但是蘋果掌控價值鏈的姿態太過強勢,很可能會妨礙其進一步壯大,并重蹈當年Mac電腦大敗于IBM兼容PC的覆轍。Google的Android則因為推出太晚,硬件廠商的產品支撐不足,未來走勢還不明朗。但是技術發展所帶來的變化總是出人意料的,市場強弱的轉化往往也在轉瞬之間。現在就定奪誰是誰非,還為時過早,還是讓我們拭目以待吧。