蘋果(Apple)的iPhone(圖1)使得觸摸界面和小型應(yīng)用程序成為一種生活方式。谷歌(Google)的Android緊隨其后,在以摩托羅拉(Motorola)Droid(圖2)為代表的日益增長的智能手機中提供相似的功能和性能。現(xiàn)在,Android已經(jīng)得到了開放手機聯(lián)盟(OHA)的支持。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F1.JPG)
蘋果的iPad(圖3)則進一步增加了取勝的把握(參見“Success Of iPad Is All About Software”)。iPad不是第一臺平板電腦,但卻是至今最成功的平板電腦(參見“With iPad Sales Soaring, Are Netbooks Dead?”)。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F2.JPG)
iPad的硬件與iPhone稍有不同(參見“Inside The Apple iPad”)。但底層軟件允許應(yīng)用程序既能在iPad也能在iPhone上運行。大多數(shù)用戶從蘋果的應(yīng)用商店(App Store)獲取iPad和iPhone的應(yīng)用程序。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F3.JPG)
Android用戶可以從Android Marketplace獲得大部分應(yīng)用程序。這些用戶幾乎無一例外地使用基于Android的智能手機,因為他們正是Android的初始目標用戶。有許多公司正準備將Android應(yīng)用到包括平板電腦的其它領(lǐng)域;贏ndroid的Archos 10平板電腦就是有望沖擊市場的Android平板電腦(圖4)之一。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F4.JPG)
iPhone、iPad和Android智能手機成功的關(guān)鍵是擁有第三方提供的大量應(yīng)用程序。底層操作系統(tǒng)、編程構(gòu)架和用戶界面使得這些平臺更加容易使用。另外,高分辨率觸摸屏和低功耗、高性能多核處理平臺提供了高度交互的觸摸應(yīng)用所需的響應(yīng)性能。
一個典型的Android硬件平臺(圖5)包含有無數(shù)的接口,如果所有接口同時工作,那么連十年前的臺式機都將甘拜下風,F(xiàn)在,三維加速計可以跟蹤設(shè)備的動作,而照相機可以進行記錄。編程框架的雜務(wù)程序(chore)可輕松實現(xiàn)這種硬件的編程,如今這些編程框架已經(jīng)成為標準的軟件組件。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F5.JPG)
觸摸編程構(gòu)架
眾所周知,觸摸界面只是蘋果平臺和Android平臺上使用的編程構(gòu)架的一部分。但它們從初始設(shè)計階段就包含在架構(gòu)內(nèi),不是外加到現(xiàn)有構(gòu)架上去的。
蘋果的iOS為蘋果開發(fā)人員提供了操作系統(tǒng)(OS)和Cocoa-Touch構(gòu)架。這種構(gòu)架基于Mac OS的Cocoa應(yīng)用編程接口(API),并采用模型-視圖-控制器(MVC)架構(gòu)。
SQLite是上述混合型系統(tǒng)的一部分,雖然系統(tǒng)中的Core Data存儲中心也能用來存儲信息。其它主要組件包括Core Data、Core Audio、OpenAL、Media Library和WebKit等。視頻組件則包括Core Animation、OpenGL ES和Quartz 2D。
默認的編程語言是Objective-C,這是一種C語言的面向?qū)ο蟮臄U展和超集。Objective-C與許多開發(fā)人員熟悉的C++有很大的差別。Objective-C使用Smalltalk類型消息傳遞,這使得轉(zhuǎn)發(fā)消息成為可能。
蘋果的軟件開發(fā)套件(SDK)可以處理iPhone和iPad應(yīng)用程序。它包含了許多工具,比如種用來創(chuàng)建應(yīng)用程序用戶界面的圖形化編輯器Interface Builder。
Android軟件構(gòu)架(圖6)運行在Linux和Dalvik Java虛擬機(JVM)之上。Dalvik源代碼通過Apache許可證獲得授權(quán),由于改動不必像GPL(通用公共許可)那樣需要公之于眾,這種許可證更適合許多組織使用。Android應(yīng)用程序由運行在Dalvik上的Java編寫。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F6.JPG)
Dalvik是一種針對移動設(shè)備而優(yōu)化的JVM。對于Davlik基于寄存器的方式(圖7)是否優(yōu)于基于堆棧的典型JVM一直存在很多爭論,但如果要求使用Android的話它是一個合適的平臺。
此外,Dalvik將一種虛擬方法應(yīng)用于帶有64k 32位寄存器的寄存器文件,雖然從執(zhí)行角度看可能會用到一個小型子集。Java從根本上隱藏了內(nèi)部實現(xiàn),不過了解其內(nèi)部細節(jié)仍是一件有趣的事。
Dalvik采用字節(jié)代碼,但編碼機制不同于Sun的Java規(guī)范。與許多基于寄存器的物理架構(gòu)一樣,Dalvik的指令編碼可以根據(jù)所用的指令提供對有限數(shù)量寄存器的訪問。
因此,簡短的指令可以訪問少量寄存器,但也能提供對更多寄存器的訪問,代價是更長的指令或間接訪問。理論上,映射到真實處理器的Dalvik指令要比基于堆棧的方式更加高效。
Sun一直存在一個區(qū)分Java是語言還是平臺的問題。像J2SE(Java 2標準版)和J2EE(J2企業(yè)版)等Java版本定義了庫的構(gòu)架。在某種意義上,Android與這些版本有可比性,雖然Android改變的不僅僅是相關(guān)的庫。
例如,Android使用DEX文件而非JAR文件。從功能上看,兩者同樣地定義了Java類,甚至可以在兩種格式之間轉(zhuǎn)換文件。不過,兩者的差異限制了這種轉(zhuǎn)換的質(zhì)量。單獨的類可以修改,但通常應(yīng)用程序依賴于大量基礎(chǔ)庫,這使得應(yīng)用程序在平臺之間的移植變得相當困難。
Android本質(zhì)上定義了一整套應(yīng)用程序可以引用的內(nèi)核和標準庫。但Android設(shè)計工程師不需要從頭開始使用所有庫。事實上,標準已經(jīng)為許多庫提供了基礎(chǔ)。
例如,2D圖形是自定義的,但3D圖形基于OpenGL ES 1.0規(guī)范,這使得硬件加速更容易實現(xiàn)。同樣,SQLite提供結(jié)構(gòu)化的數(shù)據(jù)存儲。熟悉SQL的開發(fā)人員會發(fā)現(xiàn)Android用起來非常舒服。
集成的瀏覽器是基于開源WebKit引擎。另外,多媒體功能支持通用的音視頻和靜止圖像格式,如H.264、MP3、MPEG4、AAC、AMR、GIF、PNG和JPG。
Android擁有一套豐富的通信庫。這些庫能夠支持經(jīng)常需要融合Wi-Fi、藍牙、GSM、EDGE和 3G功能的通話和網(wǎng)絡(luò)連接。其它庫則能夠應(yīng)對數(shù)碼相機、GPS、加速計和羅盤等硬件設(shè)備需求。
Android是一種多任務(wù)構(gòu)架。每個進程在通過一個Linux進程實現(xiàn)的虛擬機上運行。此外,剛開始使用Android的開發(fā)人員需要理解如何使用和創(chuàng)建activity、intent、service、content provider和broadcast receiver。activity描述了應(yīng)用程序的可視界面。應(yīng)用程序可能會提供一個以上的activity。
intent是一種用于激活activity的異步消息。intent還能啟動service和broadcast receiver。intent過濾器用來實現(xiàn)intent與特定對象的匹配。
大多數(shù)intent過濾器在用于定義應(yīng)用程序的AndroidManifest.xml文件中聲明。與activity不同,service沒有可視界面,它在后臺運行,執(zhí)行類似音頻回放等操作。
應(yīng)用程序可能包含任意數(shù)量的broadcast receiver,這些broadcast receiver被設(shè)計用于接收像狀態(tài)變化消息之類的intent。例如,應(yīng)用程序可能有一個檢測低電池電壓狀態(tài)的broadcast receiver。與service一樣,broadcast receiver沒有用戶界面(UI),但它能啟動一個activity。
content provider用于處理應(yīng)用程序的數(shù)據(jù)存儲。content provider可能使用SQLite來實現(xiàn)存儲,也可能采用其它存儲機制,甚至可以通過網(wǎng)絡(luò)連接與遠程數(shù)據(jù)庫協(xié)作。應(yīng)用程序利用content resolver對象與content provider進行交互。content resolver可以與任何content provider協(xié)作。
與大多數(shù)應(yīng)用程序在其它平臺上(如蘋果的Mac OS和微軟的Windows等)擁有相關(guān)資源一樣,Android應(yīng)用程序也擁有與應(yīng)用相關(guān)的資源。這些資源可以是應(yīng)用程序能夠使用的數(shù)據(jù),如圖像甚至文本。開發(fā)工具可以對這些資源進行操作,從而能在不修改代碼的情況下進行應(yīng)用程序的定制。
Android可以自動處理許多操作。當其它應(yīng)用需要時能啟動某個應(yīng)用程序。開發(fā)人員需要理解所有這些組件的工作和交互原理以便創(chuàng)建Android應(yīng)用程序。
嵌入式Android
蘋果的解決方案包括提供硬件和軟件,這對于想要為iPad或iPhone編寫應(yīng)用程序的開發(fā)人員來說不是壞事,但對于那些想要構(gòu)建嵌入式連網(wǎng)設(shè)備的公司來說卻沒什么幫助。Android不受底層硬件的限制,這也正是Android能夠用于智能手機和平板電腦以外的領(lǐng)域的原因。
一部分挑戰(zhàn)在于確定Android的定位,以及在保留有用的基礎(chǔ)架構(gòu)和外設(shè)支持的同時,能夠?qū)崿F(xiàn)多少種不同形式。例如,GPS定位在移動設(shè)備中非常有用,但在位置固定的設(shè)備中卻用處不大。這兩種設(shè)備可以共享公共的顯示器和觸摸界面,隨著開關(guān)和按鍵移植到平板顯示器和觸摸界面上,這個問題顯得非常重要。
當然,嵌入式開發(fā)人員知道天下沒有免費的午餐。針對特定硬件平臺進行Android定制要比面向新硬件的典型板級支持包(BSP)復(fù)雜得多。
明導(dǎo)資訊(Mentor Graphics)和風河(Wind River)等軟件供應(yīng)商可以幫助開發(fā)人員用Android開發(fā)新的硬件平臺。這方面的支持很重要,因為成功的Android支持涵蓋了硬件以及系統(tǒng)和應(yīng)用程序開發(fā)使用的工具套件。
明導(dǎo)公司的Mentor Embedded ReadyStart平臺不僅提供系統(tǒng)支持,還提供了工具集和集成的軟件。除了Android服務(wù)外,明導(dǎo)公司還提供面向Android的Inflexion UI,這種UI有助于實現(xiàn)3D效果和快速UI開發(fā)。針對Eclipse的Inflexion插件能夠自動產(chǎn)生Android activity和構(gòu)架類源代碼。
面向Android的ARM平臺一直非常流行,雖然這并非一種必需資源。ARM推出的Android解決方案中心(SCA)是一種中央網(wǎng)絡(luò)資源,它凸顯了ARM/Android社群關(guān)系。
MIPS科技公司也不甘落后,發(fā)布了面向MIPS平臺的Android源代碼。MIPS架構(gòu)實際上與Dalvik虛擬機工作得非常融洽。借助與SysDSoft聯(lián)合開發(fā)的首個面向Android的LTE協(xié)議棧等成果,MIPS公司將Android性能發(fā)揮到了極致。MIPS還為MIPS32平臺上的Android提供對稱多處理(SMP)支持,以及圖形硬件加速知識產(chǎn)權(quán)(IP)。
其它替代技術(shù)
蘋果的iOS和谷歌的Android只是移動領(lǐng)域眾多平臺中的兩種。雖然蘋果電視是另一種采用蘋果技術(shù)的消費產(chǎn)品,但iOS基本上不可能用于非蘋果平臺。
Android有可能對基于Linux的MeeCo和微軟Windows Phone 7平臺(參見“Microsoft Starts Over With Windows Phone 7”)造成沖擊。微軟Windows Phone 7是一種智能手機平臺,但這種平臺上也能見到Android智能手機的身影。
微軟平臺具有一個同樣在其高端系統(tǒng)上使用的類似構(gòu)架,包括使用.NET構(gòu)架。Windows Phone 7增加了對觸摸界面的支持,但它無需創(chuàng)建新的顯示支持。
同樣,對于LINQ(語言級集成詢問)的支持等功能也是現(xiàn)有Windows構(gòu)架的一部分。微軟的各種Windows版本同樣瞄準了智能手機和平板電腦以外的應(yīng)用領(lǐng)域。
MeeGo是另一種讓人感興趣的技術(shù),Android可能會在像機頂盒和智能電視這樣的非智能手機嵌入式應(yīng)用中碰到這種技術(shù)。開源和基于Linux的MeeGo最初是針對Intel的Atom處理器開發(fā)的,但其構(gòu)架更通用。由于支持Linux的平臺種類十分廣泛,MeeGo有可能在其中某些目標平臺中流行起來。MeeGo的目標應(yīng)用涵蓋從上網(wǎng)本到車載娛樂設(shè)施甚至多媒體手機及聯(lián)網(wǎng)電視。
在所有這些平臺中,MeeGo似乎是最傳統(tǒng)的。它的架構(gòu)中包含與Android等其它平臺上所使用的類似服務(wù),包括通信服務(wù)、互聯(lián)網(wǎng)服務(wù)、可視服務(wù)、媒體服務(wù)和數(shù)據(jù)管理支持等(圖7)。
![《20101230_PD_EDA_OT_52》](http://www.ed-china.com/ARTICLE_IMAGES/201012/20101230_PD_EDA_OT_52F7.JPG)
在某種意義上,MeeGo使應(yīng)用程序更加接近硬件。應(yīng)用程序可以用針對Linux的任何語言編寫。這些特性既是優(yōu)點,同樣也是缺點。
MeeGo將許多補丁加入標準Linux平臺。在內(nèi)核、Linux核心功能和X Windows顯示子系統(tǒng)等領(lǐng)域都有這些補丁的身影。
MeeGo的成果包括大量項目,如MeeGo多媒體、MeeGo藍牙、MeeGo蜂窩和MeeGo安全構(gòu)架。甚至有一個能滿足開發(fā)者對工具及用途要求的MeeGo Developer Tools項目。
理論上,針對MeeGo的應(yīng)用程序發(fā)布服務(wù)(相當于蘋果AppStore和Android Market Place的MeeGo軟件)其目標是特定的實現(xiàn)。MeeGo本身僅限用于x86微處理器,因此大多數(shù)用戶可能有選擇和安裝應(yīng)用程序的類似用戶體驗。很多Linux OS供應(yīng)商(如風河)都支持MeeGo。
與微軟的Windows Phone 7一樣,MeeGo對于熟練掌握Linux和Windows的開發(fā)人員來說可能會感覺更熟悉。它們的工具集是相同的,微小的差別主要與一些專門針對目標環(huán)境的庫或服務(wù)有關(guān)。讓我們期待在平板電腦上能看到它們。
起訴還是競爭
雖然蘋果公司的硬件和軟件都是自己開發(fā)的,但這也沒能使其免遭外部的合法攻擊。同樣,由于Oracle、谷歌和微軟等業(yè)界巨頭在法庭內(nèi)外斗得不亦樂乎,Android仍處于動蕩的狀態(tài)。
Oracle非常反感谷歌的Dalvik實現(xiàn),并且正在就Java提起訴訟。顯然,使用完全不同的JVM、運行時和類系統(tǒng)是不夠的。Android使用了Java語言,但僅限于語法和語義。
律師不可能平息對這些平臺的質(zhì)疑。幸運的是,平臺的普及取決于功能和可用性,而不是其能否勝訴。
Android和iOS之爭的贏家最終是用戶。開發(fā)人員必須根據(jù)具體應(yīng)用、市場以及與架構(gòu)無關(guān)的大量其它問題進行選擇。
這兩種平臺有很大的差異,因此撰寫一個通用規(guī)范將很困難,限制因素很多,但底層構(gòu)架顯然將使這樣的任務(wù)更容易實現(xiàn)。 |