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