基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計



《基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《基于Android的智能手機(jī)開發(fā)畢業(yè)設(shè)計(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 1 緒論 1.1 智能手機(jī)平臺 智能手機(jī)具有獨立的操作系統(tǒng),像個人電腦一樣支持用戶自行安裝軟件、游戲等第三方服務(wù)商提供的程序,并通過此類程序不斷對手機(jī)的功能進(jìn)行擴(kuò)充,同時可通過移動通訊網(wǎng)絡(luò)來實現(xiàn)無線網(wǎng)絡(luò)接入。目前,全球多數(shù)手機(jī)廠商都有智能手機(jī)產(chǎn)品,而芬蘭諾基亞、美國蘋果、加拿大RIM(黑莓)、美國摩托羅拉、中國臺灣宏達(dá)(htc)更是智能機(jī)中的佼佼者。 智能手機(jī)具有五大特點:1. 具備無線接入互聯(lián)網(wǎng)的能力,即需要支持GSM網(wǎng)絡(luò)下的GPRS或者CDMA網(wǎng)絡(luò)的CDMA 1X或3G網(wǎng)絡(luò)。 2. 具有PDA的功能,包括PIM(個人信息管理),日程記事,任務(wù)安排,多媒體應(yīng)用,瀏覽網(wǎng)頁。
2、 3. 具有開放性的操作系統(tǒng),可以安裝更多的應(yīng)用程序,使智能手機(jī)的功能可以得到無限擴(kuò)展。4. 人性化,可以根據(jù)個人需要擴(kuò)展機(jī)器功能。5. 功能強(qiáng)大,擴(kuò)展性能強(qiáng),第三方軟件支持多。 1.1.1 Symbian Symbian(中文名:塞班)是一個實時性、多任務(wù)的純32位操作系統(tǒng),具有功耗低、內(nèi)存占用少等特點,非常適合手機(jī)等移動設(shè)備使用,經(jīng)過不斷完善,但是雖然在智能型手機(jī)市場取得了無比的成功,并長期居于首位,Symbian S60、Symbian3,UIQ等(尤其是S60)系統(tǒng)近兩年亦遭遇到顯著的發(fā)展瓶頸。最近12個月歐洲手機(jī)公司諾基亞(Nokia)在智能手機(jī)市場市占率的滑落是不爭的事
3、實。需要注意的是,并不是所有的Symbian系統(tǒng)都是智能系統(tǒng),比如S40系統(tǒng),就不屬于智能手機(jī)系統(tǒng)。 1.1.2 Android Android ( 中文名:安卓) 是基于Linux平臺開源手機(jī)操作系統(tǒng)名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。目前在市場上可謂如日中天,越來越受到玩家的青睞,倍受摩托羅拉推崇。在Android發(fā)展的過程中,摩托羅拉付出的是核心代碼,Google付出的是公關(guān)和品牌效應(yīng),當(dāng)然還有它的google app,但是Google掌握了Android Market以及通過android google a
4、pps獲得的大量用戶。 1.1.3 OS(Tapas) 點心操作系統(tǒng)(Tapas OS)是一款基于Android操作平臺、針對中國用戶使用習(xí)慣打造的互聯(lián)網(wǎng)智能手機(jī)操作系統(tǒng),在底層技術(shù)架構(gòu)優(yōu)化的基礎(chǔ)上,為用戶提供流暢的操作體驗;同時根據(jù)本土化需求,提供貼心的功能設(shè)計及豐富的移動互聯(lián)網(wǎng)應(yīng)用。點心操作系統(tǒng)由北京風(fēng)靈創(chuàng)景科技有限公司開發(fā)。該公司是李開復(fù)博士旗下的創(chuàng)新工場投資孵化的第一家公司。此外,點心還推出“均衡云計算”理念,整合網(wǎng)絡(luò)環(huán)境、終端設(shè)備等負(fù)責(zé)狀況,智能分配手機(jī)端及云端計算量、管理流量分配,為用戶提供安全貼心的云計算服務(wù)。 1.1.4 Windows Mobile 作為
5、軟件巨頭微軟的掌上版本操作系統(tǒng),在與桌面PC和Office辦公的兼容性方面具有先天的優(yōu)勢,而且WM具有強(qiáng)大的多媒體性能,辦公娛樂兩不誤,讓他成為最有潛力的操作系統(tǒng)之一。以商務(wù)用機(jī)為主,目前市場已顯出頹勢,最新版本為Windows Phone 7,幾乎對舊有的WM系統(tǒng)全盤推翻再造,其應(yīng)用機(jī)型已逐漸上市,不過價格不菲。 1.1.5 iOS ios是(又稱MAC OS)由蘋果公司為iPhone開發(fā)的操作系統(tǒng),它主要是給iPhone、iPod touch以及iPad使用。最新版本為iOS4.3.2,該系統(tǒng)的UI設(shè)計及人機(jī)操作前所未有的優(yōu)秀,軟件極其豐富。蘋果完美的工業(yè)設(shè)計配以iOS系統(tǒng)的
6、優(yōu)秀操作感受,就靠僅有的幾款機(jī)型,已經(jīng)贏得可觀的市場份額。 1.1.6 MeeGo MeeGo是諾基亞和英特爾宣布推出一個免費手機(jī)操作系統(tǒng),中文昵稱米狗,該操作系統(tǒng)可在智能手機(jī)、筆記本電腦和電視等多種電子設(shè)備上運行,并有助于這些設(shè)備實現(xiàn)無縫集成。這種基于Linux的平臺被稱為MeeGo,融合了諾基亞的Maemo和英特爾的Moblin平臺。 1.1.7 Web OS Web OS(又稱Palm os)以其獨特的外形,另類的系統(tǒng)吸引了無數(shù)人的眼球,但是一個問題,就是目前沒有任何正規(guī)途徑,還有應(yīng)用軟件的問題,配套太少。Web OS系統(tǒng)目前仍有很多的計算機(jī)編程愛好者,在努力的專
7、研。目前也Palm公司被惠普收購。希望其在主流系統(tǒng)云集的將來,不被隕歿! 1.1.8 BlackBerry OS BlackBerry OS是RIM公司獨立開發(fā)出的與黑莓手機(jī)配套的系統(tǒng),目前在全世界都頗受歡迎,在此系統(tǒng)基礎(chǔ)上,黑莓的手機(jī)更是獨樹一幟的在智能手機(jī)市場拼搏,目前也已在中國形成了大筆粉絲。望其開發(fā)的愈來愈好,道路愈走愈寬! 1.1.9 三星Bada bada是韓國三星公司自行開發(fā)的智能手機(jī)平臺,支持豐富功能和用戶體驗的軟件應(yīng)用,于2009年11月10日發(fā)布。bada在韓語里是“海洋”的意思。 bada的設(shè)計目標(biāo)是開創(chuàng)人人能用智能手機(jī)的時代。它的特點是配置靈活、
8、用戶交互性好、面向服務(wù),非常重視SNS集成和地理位置服務(wù)應(yīng)用。 bada系統(tǒng)由操作系統(tǒng)核心層、設(shè)備層、服務(wù)層和框架層組成。支持設(shè)備應(yīng)用、服務(wù)應(yīng)用和Web與Flash應(yīng)用。 1.2 Android 平臺介紹 Android從誕生到現(xiàn)在也不過3年的時間,但是也就是在這短短的3年內(nèi)Android創(chuàng)造了一個迅速被人們知曉并追捧的奇跡。2007 年11 月5 日,Google 與其他33 家手機(jī)制造商(包含摩托羅拉、宏達(dá)電、三星、LG)、手機(jī)晶片供應(yīng)商、軟硬體供應(yīng)商、電信業(yè)者所聯(lián)合組成的開放手持裝置聯(lián)盟(Open Handset Alliance),發(fā)布了名為Android的開放手機(jī)軟硬體平臺。
9、該聯(lián)盟的成員宣布日后都會在Android平臺上開發(fā)他們的新的業(yè)務(wù)。不久之后的2008 年9 月24 日,T-Mobile 公司首度公布第一臺Android 手機(jī)(G1)的細(xì)節(jié),同日Google 也放出了Android SDK 1.0 rc1。這樣Android進(jìn)入了人們的視線。 Android以其特有的開放性優(yōu)勢越來越受到人們和智能手機(jī)廠商的關(guān)注。 對于第三放軟件開發(fā)商來說,Android 是一個真正意義上的開放性移動設(shè)備綜合平臺,Android系統(tǒng)是免費向開發(fā)人員提供的,這樣就避免了開發(fā)中專利權(quán)的障礙。因此,就能夠為第三方軟件開發(fā)商省下大筆資金。 對于設(shè)備制造商來說,Android是一
10、個免費的平臺。當(dāng)設(shè)備制造商每制造一臺手機(jī)時,那些支付給手機(jī)系統(tǒng)制造商的費用也省去了,這樣也降低了每臺手機(jī)的生產(chǎn)費用,同時就降低了手機(jī)的價格,這樣在市場上也提高了競爭力。 對硬體開發(fā)廠商來說,Android也是個開放的平臺。使用Android平臺的廠商可以更具自己的需求以及能力為Android開發(fā)具有該廠商特色的功能,但是這樣的增加完全不用考慮版權(quán)的問題。 同時Android平臺支持各種先進(jìn)的網(wǎng)絡(luò)、繪圖、3D 處理能力,可以用來提供更好的使用者體驗。 Google Android 系統(tǒng)作為一個完全開源的操作系統(tǒng),是由操作系統(tǒng)(Linux)、中間件以及核心應(yīng)用程序組成的軟件棧(softwar
11、e stack)。通過 android SDK 提供的 API 以及相應(yīng)的開發(fā)工具, 程序員可以很方便的開發(fā)android平臺上的應(yīng)用程序。其整個系統(tǒng)由應(yīng)用程序(Application),應(yīng)用程序框架(Application Framework),應(yīng)用程序庫(Libraries),Android運行庫(Android Runtime),Linux內(nèi)核(Linux Kernel)五個部分組成。Android操作系統(tǒng)內(nèi)置了一部分應(yīng)用程序, 包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、通訊錄以及其他的程序,值得一提的是這些所有的程序都是用java編寫的。 因為應(yīng)用程序框架使得組件更易于重用
12、,所以開發(fā)者的應(yīng)用程序可以很容易的調(diào)用API函數(shù)實現(xiàn)我們想要的功能。在遵守應(yīng)用程序框架的安全機(jī)制約束的前提下,開發(fā)者開發(fā)的一個應(yīng)用程序可以使用其他程序所開發(fā)的功能。雖然Android的應(yīng)用程序是用Java語言開發(fā)的,但是Android給應(yīng)用程序開發(fā)者提供了一系列的 C/C++ 程序庫,通過Android的一些特殊的設(shè)計,我們開發(fā)者可以使用這些庫,這在后面的敘述中將看到。 現(xiàn)今,Android操作系統(tǒng)已成為許多手機(jī)制造商的寵兒,其中包括HTC、索尼愛立信、Samsung、摩托羅拉以及國內(nèi)的聯(lián)想、華為、海爾、華禹等。其中值得一提的是摩托羅拉公司,就在2009年11月憑借其一款搭載Android平
13、臺的Droid手機(jī),兩個月內(nèi)就突破百萬臺,擊敗了蘋果的iPhone 3GS,被《時代》雜志評選為“年度最佳科技產(chǎn)品”。因此告別了兩年多的低迷態(tài)勢,走出了泥潭。2 Android的系統(tǒng)研究 2.1 Android構(gòu)架 2.1.1 Android的構(gòu)架綜述 Android是一個包括操作系統(tǒng),中間件以及一些重要應(yīng)用程序的專門針對移動設(shè)備的層次結(jié)構(gòu)的軟件集[1]。作為一個層次結(jié)構(gòu)的軟件集,一定有一個層次的系統(tǒng)構(gòu)架,下圖為Android的構(gòu)架圖: 圖2-1 Android 系統(tǒng)構(gòu)架 從圖2-1中明顯的可以看出該系統(tǒng)從下到上包括Linux內(nèi)核層、Libr
14、aries和運行時環(huán)境層、應(yīng)用程序框架層、應(yīng)用程序?qū)铀膶咏Y(jié)構(gòu)。在Android的最下層的操作系統(tǒng)基于Linux2.6內(nèi)核,往上的中間件包括Libraries和運行時環(huán)境層和應(yīng)用程序框架層兩個層次,最上層則是應(yīng)用程序?qū)印? 在Android構(gòu)架中,可以很明顯的看到,底層的Linux內(nèi)核則采用的是C語言,libraries采用C或者C++,但是應(yīng)用程序?qū)?、?yīng)用程序框架層和運行時環(huán)境中的Android核心庫采用Java語言編寫,也就是說Android雖然底層用的是C或者C++但是應(yīng)用程序的開發(fā)則用的是Java。Google采用這樣的模式可能是因為相對于C或者C++,Java的開發(fā)周期更短的緣故,這樣
15、的話就能在短時間內(nèi)為Android提供大量的應(yīng)用軟件。我們知道,作為一個智能手機(jī)平臺,只有擁有了大量的源源不斷的應(yīng)用程序作為支持,才能受人們的歡迎,從而才能占領(lǐng)市場。之前Nokia的s60第三版就是一個很好的例子,因此Nokia S60v3的系統(tǒng)才被世人所熟知,并且曾經(jīng)在智能手機(jī)行業(yè)占有很大的市場。而另一個例子就是Linux系統(tǒng),在所有操作系統(tǒng)中,穩(wěn)定性和性能上能夠和Linux抗衡的系統(tǒng)不多吧,但是在智能手機(jī)市場上為什么Linux卻可以說是一敗涂地,其原因也和其第三方應(yīng)用少是脫不了關(guān)系的。 2.1.2 內(nèi)核層 Google Android 作為一個開源的操作系統(tǒng)其內(nèi)核采用了同樣開源的被業(yè)
16、界認(rèn)為是相當(dāng)穩(wěn)定的Linux作為其內(nèi)核,其中Linux內(nèi)核包括以下功能模塊:安全(Security)、存儲器管理(Memory Management)、進(jìn)程管理(Process Management)、網(wǎng)絡(luò)堆棧(Network Stack)、驅(qū)動程序模型(Driver Model)等,另外也在給其上層的軟件和下層硬件間建立起一個抽象層(Abstraction Layer)。同時Android在Linux 2.6的內(nèi)核上進(jìn)行了一些增加和刪改,使Linux更加適應(yīng)ARM平臺。 ⑴增加了一個基于ARM構(gòu)架的GoldFish平臺作為虛擬機(jī)的虛擬CPU。 ⑵增加了YAFFS2 FLASH系統(tǒng)文件,因
17、此增加了對NANDFLASH支持。 ⑶增加了Android相關(guān)的驅(qū)動。例如Android的IPC(進(jìn)程間通信機(jī)制)binder,使用這個能使運行的進(jìn)程為其他進(jìn)程提供服務(wù);Android的日志系統(tǒng)(Logger)和內(nèi)存控制臺(Ram_console);同時Google還重寫了電源管理(Power) ⑷增加了新的共享方式Ashmem(匿名共享內(nèi)存),多個應(yīng)用程序可以這種方式共享內(nèi)存獲取信息,為進(jìn)程間提供大量共享內(nèi)存,同時為內(nèi)核提供回收和管理這個內(nèi)存的機(jī)制。 2.1.3 Android Runtime和函數(shù)庫層 2.1.3.1 函數(shù)庫 Android 包含一些C/C++庫,Androi
18、d系統(tǒng)中的各種不同組件都能夠使用這些庫函數(shù)。這些庫函數(shù)通過Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下列舉了一些庫函數(shù)[2]: ①系統(tǒng) C 庫-一個專門為Embedded Linux設(shè)備定制的從BSD(Berkeley Software Distribution 伯克利軟件套件)繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫。 ②媒體庫 - 基于 PacketVideo公司的OpenCORE開發(fā)設(shè)計的。該庫支持MPEG4, H.264, MP3, AAC, AMR, JPG, PNG多種常用的音頻、視頻格式的回放和錄制,同時支持靜態(tài)圖像文件。 ③Surface Manager - 對顯示子系統(tǒng)的管理,并
19、且為多個應(yīng)用程序提 供了2D和3D圖層的無縫融合,提供如同類似iPhone的界面管理功能。 ④LibWebCore - 一個支持Android瀏覽器和一個可嵌入的web視圖的最新的web瀏覽器引擎。 ⑤3D libraries - 基于OpenGL ES 1.0 APIs實現(xiàn);該庫可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。 ⑥SQLite - 一個功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎,Android中所有應(yīng)用程序都可以調(diào)用它。 ⑦FreeType -位圖(bitmap)和矢量(vector)字體顯示。 ⑧SGL - 底層的2D圖形引擎。 2.1.3.2 And
20、roid Runtime 前面說到Android采用Java作為應(yīng)用程序的開發(fā)語言,但是雖然使用的是Java語言,但是Google卻沒使用傳統(tǒng)的Java Runtime來執(zhí)行應(yīng)用程序而是采用Android自己特有的Android Runtime。從Android 的系統(tǒng)構(gòu)架圖中可以清楚的看到,Android Runtime由Android函數(shù)庫(Android Libraries)和Dalvik虛擬機(jī)組成[3]。 Android函數(shù)庫中里包含了大部分Java程序語言所需要調(diào)用的函數(shù)庫,如data structure, network, utilities, file system等,其中很
21、多代碼是源于2005年的Apache Harmony項目。這樣做的話能夠使Android的虛擬機(jī)的類庫與Java SE的類庫有非常大的相似性,進(jìn)而提高了Java SE類庫的兼容性,最大限度的降低了一個程序員從Java平臺開發(fā)到Andorid平臺開發(fā)的難度,這樣就降低了對Android開發(fā)的準(zhǔn)備時間以及前期培訓(xùn)的費用,從而降低了Android應(yīng)用程序開發(fā)的周期以及開發(fā)費用,這樣的話短時間內(nèi)就能讓Google Android系統(tǒng)能夠擁有大量的可執(zhí)行的應(yīng)用程序。另外,使用Apache Harmony 類庫還能完全擺脫Sun的束縛而走上完全開源的Java之路,這樣也奉行了Google對Android完
22、全開源的原則。 我們知道,對一個應(yīng)用程序而言,都采用一個屬于該應(yīng)用程序的進(jìn)程作為執(zhí)行的載體,同樣,對于Android也是,一個應(yīng)用程序也是有一個屬于它的進(jìn)程。之前說過Android采用Java作為開發(fā)語言,在進(jìn)程執(zhí)行時應(yīng)該會有一個Java虛擬機(jī)來為進(jìn)程提供服務(wù)。在Android構(gòu)架圖中可以看到, 該系統(tǒng)采用的是一個叫做Dalvik的虛擬機(jī)。在前面的研究中我們了解到Dalvik虛擬機(jī)是一個Java 虛擬機(jī),但是又和Java虛擬機(jī)有所不同。Dalvik虛擬機(jī)和傳統(tǒng)的Java虛擬機(jī)所不同之處的是傳統(tǒng)的Java虛擬機(jī)是一個虛擬機(jī)來為不同應(yīng)用程序提供服務(wù),而Google自己開發(fā)的Dalvik虛擬機(jī)則是
23、每一個Android應(yīng)用程序都擁有一個其自身的Dalvik虛擬機(jī),換句話說就是專屬于每一個應(yīng)用程序?qū)?yīng)著一個Dalvik虛擬機(jī)而這個Dalvik虛擬機(jī)相當(dāng)于一個執(zhí)行個體。有關(guān)Dalvik虛擬機(jī)的內(nèi)容將在下一個部分詳細(xì)說明。 Android函數(shù)庫和Dalvik虛擬機(jī)組成了Android的運行時環(huán)境。從圖中可以看到,Android Runtime和Libraries在同一層,建立在Linux Kernel 層之上,與Linux Kernel 沒有交集,而是直接嵌套到libraries中。我們之前說過,我們開發(fā)者可以調(diào)用C和C++的一些類庫。其實就是這樣Android Runtime與Librar
24、ies在同一層的設(shè)計并同時讓Android Runtime 中的Android Libraries 引用libraries中的函數(shù),而通過Dalvik虛擬機(jī)編譯以后再調(diào)用這些函數(shù)做到上面所述的功能。 也就是說其實Android Libraries中的函數(shù)只是libraries中的一些引用,當(dāng)一個上層的應(yīng)用程序調(diào)用Dalvik虛擬機(jī)中的核心庫函數(shù)時,調(diào)用的其實只是一個函數(shù)名,并不是函數(shù)的具體實現(xiàn),然后Dalvik虛擬機(jī)對該函數(shù)進(jìn)行一些處理以后再通過Dalvik虛擬機(jī)調(diào)用libraries中的相應(yīng)函數(shù),使之運行。換句話說就是,Android Libraries中的只是一個函數(shù)名,而真正代碼的實現(xiàn)
25、是libraries中的C或者C++代碼。這樣的好處就在于那些使用Java語言很難實現(xiàn)但是在C或者C++卻能很容易實現(xiàn)的功能也能通過Java很容易等的實現(xiàn)。 應(yīng)用程序進(jìn)程 調(diào)用Runtime中Android函數(shù)庫函數(shù) Android Libraries Android Runtime Dalvik虛擬機(jī) 交給Dalvik虛擬機(jī)進(jìn)行處理 Libraries Dalvik虛擬機(jī)調(diào)用Libraries中相應(yīng)函數(shù) 圖2-2 應(yīng)用程序調(diào)用Android Libraries中函數(shù)的過程 2.1.4 Dalvik 虛擬機(jī) Dalvik虛擬機(jī)是Android Runtime的
26、一個組成部分,之所以要把他拿出來單獨進(jìn)行研究是因為,Dalvik虛擬機(jī)作為一個Java虛擬機(jī),但它和普通的Java虛擬機(jī)有著一些不同。Google的工程師結(jié)合傳統(tǒng)的Java 虛擬機(jī),根據(jù)Android使用的平臺一般為移動終端設(shè)備這樣一個特點重新設(shè)計的虛擬機(jī),這個虛擬機(jī)在移動終端設(shè)備上運行效率上明顯比傳統(tǒng)的Java 虛擬機(jī)要高許多。Dalvik虛擬機(jī)對內(nèi)存的高效使用和在低速的CPU上表現(xiàn)出的高性能,確實讓人們刮目相看。 Android的上層應(yīng)用程序雖然是用Java開發(fā)的,但是Dalvik虛擬機(jī)卻和傳統(tǒng)的Java虛擬機(jī)有著很大的區(qū)別,兩者是不兼容的。 首先,眾所周知在Java 中,所有的程序代
27、碼會被編譯器編譯成字節(jié)碼(.class)文件,然后再打包成JAR文件,在執(zhí)行時Java虛擬機(jī)就從JAR文件中提取出相應(yīng)的字節(jié)碼文件來執(zhí)行。在Android中不再使用字節(jié)碼文件而是一種Android所特有的DEX(Dalvik EXecutable)文件。DEX文件的生成還是需要經(jīng)過生成字節(jié)碼文件的這個過程的。使用Java語言編寫好的Android程序代碼,同樣是先用Java編譯器編譯成為字節(jié)碼文件,但是在這之后還需通過Google提供的一個DX工具將編譯好的字節(jié)碼轉(zhuǎn)換成為DEX文件,然后Dalvik虛擬機(jī)通過DEX文件獲得執(zhí)行的代碼。 Google棄用字節(jié)碼文件而采用特有的DEX文件格式,
28、這表明在Android實際運行中DEX文件格式相對于字節(jié)碼文件格式應(yīng)該有一些獨特的優(yōu)勢。在Java中當(dāng)一個應(yīng)用程序定義了多個類后,通過編譯則會產(chǎn)生相應(yīng)數(shù)目的class字節(jié)碼文件,在這些字節(jié)碼文件中則必然會有冗余信息,例如一些相同的類庫會冗余等。而DEX文件格式則是把這些class字節(jié)碼文件整合到一個DEX文件中,使得字節(jié)碼中的冗余減少了,同時使整體文件的尺寸也減少了。這樣一來,對于同一個應(yīng)用程序來說,相對于Java的字節(jié)碼文件Android的DEX文件格式在I/O操作中所需要的時間也減少了,同時也減少了查找類所需要的時間。另外DEX使用等長的指令,這樣的話能夠使得DEX文件盡量的簡潔,從而提高
29、了解析速度。通過上面的研究可以看出DEX文件格式是一種專為Dalvik虛擬機(jī)設(shè)計的壓縮格式,該格式的高性能很適合內(nèi)存和處理器速度有限的平臺,從中可以看出Android是定位于嵌入式平臺的一個操作系統(tǒng)。在這也體現(xiàn)出了Google給Android所定義的發(fā)展以及戰(zhàn)略方向,如今移動平臺的網(wǎng)絡(luò)應(yīng)用已經(jīng)成為當(dāng)前移動終端設(shè)備的發(fā)展方向,作為網(wǎng)絡(luò)搜索的龍頭大哥,Android就是其打入該移動平臺網(wǎng)絡(luò)應(yīng)用的利器。 Android應(yīng)用開發(fā)和Dalvik虛擬機(jī)同樣都使用Java開發(fā)語言,在應(yīng)用程序開發(fā)好以后我們就需要將這個應(yīng)用發(fā)布到Android移動終端設(shè)備。我們把一個開發(fā)好的應(yīng)用的Java代碼經(jīng)過編譯以后生
30、成.class的字節(jié)碼文件,通過Android的DX工具轉(zhuǎn)換成.DEX格式的文件,最后使用Android的appt打包工具把DEX文件,源文件以及AndroidManifest.xml文件組合成一個APK應(yīng)用程序包,然后就能發(fā)布到移動終端設(shè)備上了。在APK應(yīng)用程序程序包發(fā)布到移動終端設(shè)備后,應(yīng)用程序運行前會對其中的DEX文件進(jìn)行優(yōu)化,優(yōu)化后的文件格式稱之為DEY,DEY文件被保存到緩存區(qū)域,虛擬機(jī)會在緩存中執(zhí)行這些文件。 其次,傳統(tǒng)的Java 虛擬機(jī)是采用的是基于棧的設(shè)計,而Dalvik虛擬機(jī)則是基于寄存器設(shè)計的。 基于棧設(shè)計的虛擬機(jī)能夠使指令變得簡單,不需要考慮程序中的源寄存器和目的寄
31、存器,只需要開辟棧空間而不需要為臨時變量再開辟一個存儲空間。另外基于棧設(shè)計的虛擬機(jī)移植性比基于寄存器設(shè)計的虛擬機(jī)要高很多,從組成原理和嵌入式操作系統(tǒng)課程中我們知道,一般的32位x86處理器的通用寄存器和32位的ARM的通用寄存器數(shù)目是不同的。虛擬機(jī)的設(shè)計中,為了執(zhí)行的效率,有時會把這些寄存器一一映射到物理寄存器上,但是由于平臺的不同,導(dǎo)致通用寄存器數(shù)量不同造成如果基于寄存器設(shè)計的虛擬機(jī)很難做到一一映射,執(zhí)行效率就會大打折扣。而用基于棧的設(shè)計的話,就不存在這種問題,就很容易的分配寄存器。另外,基于棧設(shè)計的虛擬機(jī)采用的是零地址指令,這樣的話指令形式比較緊湊。 雖然基于棧結(jié)構(gòu)的虛擬機(jī)有上述的一些優(yōu)
32、點,但是為什么Google不采用基于棧的設(shè)計而采用基于寄存器結(jié)構(gòu)設(shè)計Dalvik虛擬機(jī)呢。我個人覺得這是和Android所搭載的平臺以及Google的戰(zhàn)略有關(guān)的。首先,Android所搭載的主要平臺為移動終端設(shè)備,如今的移動終端設(shè)備雖然性能比過去好多了,但是還是無法擺脫CPU處理能力低于桌面PC,存儲資源有限的限制,在這樣一個平臺上使用基于棧的設(shè)計,在指令執(zhí)行時必定會多出一個進(jìn)棧(PUSH)和出棧(POP)的操作,那一定會影響指令執(zhí)行的效率,這也是為什么我們在一些手機(jī)平臺上運行Java程序時感到很慢的原因了。其次從Google對Dalvik虛擬機(jī)設(shè)計中采用的16個通用寄存器中可以看出Andro
33、id的發(fā)展方向是基于ARM的硬件平臺,這也和Google的戰(zhàn)略方向相一致。雖然移植性降低了,但是使用二地址和三地址的指令,使得代碼執(zhí)行效率大大提高。另外,Dalvik虛擬機(jī)雖然沒有采用現(xiàn)在流行虛擬機(jī)技術(shù)例如JIT(just in time,及時編譯)技術(shù),但是Dalvik虛擬機(jī)仍然是一個具有很高性能的虛擬機(jī),在這不得不說一下,Dalvik虛擬機(jī)是一個設(shè)計相當(dāng)不錯的虛擬機(jī)。從Dalvik虛擬機(jī)的設(shè)計上我們可以看到Google打算用Android系統(tǒng)來沖擊手機(jī)移動終端設(shè)備,想把其提供的服務(wù)擴(kuò)展到移動設(shè)備上的戰(zhàn)略。 另外,Dalvik虛擬機(jī)的設(shè)計方面也有其獨特的地方。它就是本著能夠并發(fā)執(zhí)行多個虛
34、擬機(jī)的設(shè)計思路來編寫的。每一個Dalvik虛擬機(jī)實例對應(yīng)于一個應(yīng)用程序,同時這個虛擬機(jī)實例還都是一個進(jìn)程空間。換句話說就是一個應(yīng)用對應(yīng)一個Dalvik虛擬機(jī)同時對應(yīng)一個進(jìn)程空間。不同的應(yīng)用程序在不同的Dalvik虛擬機(jī)實例中運行,不同的Dalvik虛擬機(jī)又對應(yīng)于不同的進(jìn)程空間,加之不同的應(yīng)用程序在Linux內(nèi)核中以不同的Linux用戶來執(zhí)行,這樣可以最大限度的保證應(yīng)用程度的獨立性和安全性。但Dalvik虛擬機(jī)要實現(xiàn)如線程機(jī)制,內(nèi)存的分配和管理等操作的話,仍然需要底層操作系統(tǒng)的支持。另外Dalvik虛擬機(jī)線程機(jī)制中的一個線程對應(yīng)于Linux中相應(yīng)的一個線程,這樣操作系統(tǒng)中的線程就能最大限度的為D
35、alvik虛擬機(jī)服務(wù)。通過這樣的一個設(shè)計,Android的安全性大大提高了。 說到Dalvik虛擬機(jī),那就應(yīng)該說說虛擬機(jī)中的一個特殊的虛擬機(jī)進(jìn)程Zygote,之前說過一個Dalvik虛擬機(jī)對應(yīng)一個進(jìn)程空間。Zygote進(jìn)程的功能有點類似于Linux中的1號進(jìn)程,在Linux當(dāng)系統(tǒng)啟動時即產(chǎn)生1號進(jìn)程,而其他的進(jìn)程都由1號進(jìn)程創(chuàng)建。在Dalvik虛擬機(jī)中Zygote進(jìn)程fork出所有的虛擬機(jī)進(jìn)程,每當(dāng)系統(tǒng)提出執(zhí)行一個Android應(yīng)用時,需要一個Dalvik虛擬機(jī)是,Zygote就會fork出一個子進(jìn)程來執(zhí)行該應(yīng)用。使用它可以加快系統(tǒng)的執(zhí)行,因為Zygote進(jìn)程在系統(tǒng)啟動時就產(chǎn)生,已經(jīng)完成了
36、虛擬機(jī)的初始化,預(yù)置類庫的加載和初始化等等操作。當(dāng)我們要執(zhí)行一個應(yīng)用而建立一個虛擬機(jī)時,只需讓Zygote進(jìn)程自身復(fù)制,這樣就可以減少虛擬機(jī)初始化等操作的時間。另外,對于一些只讀庫所有虛擬機(jī)實例都和Zygote進(jìn)程共享一塊內(nèi)存區(qū),這樣大大減少了對內(nèi)存的開銷。 2.1.5 Android的進(jìn)程管理機(jī)制 Android雖然是基于Linux,但是它卻采用了一種有別于Linux的一種管理機(jī)制。Linux在一個進(jìn)程活動停止后就立刻結(jié)束該進(jìn)程,而Android在一個進(jìn)程活動停止后不會立刻結(jié)束該進(jìn)程,并使該進(jìn)程常駐內(nèi)存中。直到系統(tǒng)資源不夠需要更多內(nèi)存或者當(dāng)某個結(jié)束進(jìn)程的事件發(fā)生時才將該進(jìn)程結(jié)束。
37、 在Android中進(jìn)程被分成了前臺進(jìn)程(foreground)、可見進(jìn)程(visible)、次要服務(wù)(secondary server)、后臺進(jìn)程(hidden)、內(nèi)容供應(yīng)節(jié)點(content provider)、空進(jìn)程(empty)六種。 ⑴前臺進(jìn)程是指一些系統(tǒng)進(jìn)程和當(dāng)前屏幕上正在顯示的進(jìn)程。比如說你打開Google地圖查找路線,此時Google地圖就是一個前臺進(jìn)程。⑵可見進(jìn)程則是那些雖然不在前臺,但是用戶依然可見的進(jìn)程,如輸入法,時鐘等,這些進(jìn)程雖然不是在前臺運行的,但是其存在和我們的使用卻是密切相關(guān)的,如果關(guān)閉了這些應(yīng)用程序?qū)⒔o我們的使用帶來非常大的不便⑶次要服務(wù)是一些與系統(tǒng)功能息
38、息相關(guān)的服務(wù),如Google企業(yè)套件等。⑷后臺進(jìn)程,可以這么說后臺進(jìn)程就是一個前臺進(jìn)程被另一個前臺進(jìn)程替換后,進(jìn)程沒有結(jié)束,但是已經(jīng)不再是前臺進(jìn)程的一個狀態(tài)。在實際應(yīng)用中就是當(dāng)一個前臺進(jìn)程運行時按HOME鍵后的進(jìn)程狀態(tài)⑸內(nèi)容供應(yīng)節(jié)點是沒有程序?qū)嶓w,而是僅僅提供內(nèi)容給別的程序使用的比如說日歷節(jié)點⑹空進(jìn)程是沒有任何東西在運行的進(jìn)程,在一個程序退出后會有一個沒有任何數(shù)據(jù)和代碼在運行但是依然駐留在進(jìn)程空間中的進(jìn)程,該進(jìn)程僅僅是作為一個能夠提高該程序下次啟動速度和記錄程序歷史記錄的進(jìn)程。 Android在調(diào)度以上幾種進(jìn)程時使用了一個系統(tǒng)值作為系統(tǒng)對進(jìn)程的一個評估,當(dāng)要結(jié)束一個進(jìn)程時該值的數(shù)值越大的進(jìn)
39、程被系統(tǒng)選中并結(jié)束的概率越大。一般的,前臺進(jìn)程的值為0,這表明前臺進(jìn)程不可能被系統(tǒng)選中并結(jié)束。當(dāng)進(jìn)程進(jìn)入后臺以后,系統(tǒng)將會分配一個更高的值給該進(jìn)程。相對于Linux的最近最早未使用的調(diào)度策略,Android在其基礎(chǔ)上提供了一套獨特的進(jìn)程管理模塊,他能讓程序員使用腳本來對內(nèi)存管理進(jìn)行定制。比如當(dāng)內(nèi)存小于某個值時可以結(jié)束這個系統(tǒng)值大于另外一個值的進(jìn)程,還可以當(dāng)內(nèi)存小某個值時結(jié)束上面六類進(jìn)程中的一類(但順序必須是空進(jìn)程,內(nèi)容供應(yīng)節(jié)點,后臺進(jìn)程,次要服務(wù),可見進(jìn)程,最后才是前臺進(jìn)程)。根據(jù)這種特性 該系統(tǒng)值至少由兩部分組成,一個是基值,另一個根據(jù)LRU(最近最久未使用)調(diào)度算法產(chǎn)生的一個值。對于以上說
40、的六種進(jìn)程應(yīng)該分別有一系統(tǒng)給其賦予的值,其大小順序應(yīng)該是空進(jìn)程大于內(nèi)容供應(yīng)節(jié)點大于后臺進(jìn)程大于次要服務(wù)大于可見進(jìn)程大于前臺進(jìn)程,而這個系統(tǒng)賦予的值則是基值。這樣就能保證一些這六種進(jìn)程總是當(dāng)一種進(jìn)程被結(jié)束完了以后另外一種進(jìn)程才會被結(jié)束,同時只需要根據(jù)這個系統(tǒng)值就能輕易做到對內(nèi)存管理的定制。 2.1.6 應(yīng)用程序框架層 在Android系統(tǒng)構(gòu)架圖中可以看到,應(yīng)用程序框架層是處于Android Runtime和庫函數(shù)層于應(yīng)用程序?qū)又g,之前的敘述中知道,該層使用開發(fā)語言的是Java語言。應(yīng)用程序框架是能夠讓開發(fā)者完全訪問核心應(yīng)用程序所使用的API(Application Programmin
41、g Interface,應(yīng)用程序編程接口),該框架能夠讓組件軟件重用的工做簡單化。同時該框架中的任何一個功能模塊都是等價的,任何一個應(yīng)用程序都可以發(fā)布其功能模塊,該功能模塊可以替代當(dāng)前的任意一個功能模塊,但前提是必須遵循框架的安全限制[4],另外,其他的任意應(yīng)用程序能夠使用這個發(fā)布的功能模塊。這樣的設(shè)計就使Android的構(gòu)件重用率提高了。 在每一個應(yīng)用程序背后,應(yīng)用程序框架為其提供了一系列的服務(wù)。這些服務(wù)包括:①一個豐富并且可擴(kuò)展的視圖,通過這個視圖我們可以使用它提供的一些包括按鈕、文本框、列表、網(wǎng)格等甚至可嵌入的web瀏覽器的應(yīng)用程序來構(gòu)造我們的應(yīng)用程序。②內(nèi)容提供器(content
42、providers),有了內(nèi)容提供器,一個應(yīng)用程序可以共享它自己的數(shù)據(jù)或者訪問另外一個應(yīng)用程序中共享的數(shù)據(jù)。③資源管理器(resource manager),使用資源管理器,我們在應(yīng)用程序中能夠訪問到一些如圖形、布局文件等一些非代碼資源。④通知管理器(notification manager),給程序員提供了一個可以在程序狀態(tài)欄中顯示自定義提示信息的管理器。⑤活動管理器(activity manager),提供常用導(dǎo)航功能用來管理應(yīng)用程序生命周期的服務(wù)。通過這些應(yīng)用程序框架層提供的服務(wù)程序員能夠方便的開發(fā)一個界面優(yōu)秀功能強(qiáng)大易于共享的的應(yīng)用程序。 2.1.7 應(yīng)用程序?qū)? 回到Andro
43、id系統(tǒng)構(gòu)架圖中,應(yīng)用程序?qū)影巳缑芾?、Google maps、瀏覽器等本地應(yīng)用程序(native apps),如QQ、MSN、QuickOffice等第三方應(yīng)用程序(third part apps),以及developer apps。同樣,該層的應(yīng)用程序也都使用Java語言進(jìn)行開發(fā)的。 2.2 Android的應(yīng)用 2.2.1 Android應(yīng)用的組成 任何一個Android應(yīng)用程序,都可由四個部分組成,這四個組成部分分別是①Activity;②Intent Receiver;③Service;④Content Provider[5]。對于一個應(yīng)用程序來說,不一定這四個部
44、分都需要。其中,Activity、Intent Receiver和Service是Android最基本的三個組件。其實,這四個部分全部或者其中幾個的相互協(xié)調(diào)工作組成了我們平時見到的應(yīng)用程序。 在Android中每個應(yīng)用程序都需要一個XML配置文件AndroidManifest.xml,該配置文件用于定義我們的應(yīng)用程序組件和組件的功能以及一些必要條件等。因此當(dāng)我們使用到任何一個組件時都需要在這個配置文件中進(jìn)行登記,否則就算是你在代碼中使用了這個組件,但是Android系統(tǒng)也是找不到該組件的。 2.2.2 Activity Activity是Android中最最基本的組件,實際應(yīng)用中,
45、通常就是一個單獨的屏[6],也就是一個運行在前臺程序在某一時刻在屏幕中所能展示的全部內(nèi)容就是一個Activity。每一個Activity都是繼承于Activity基類的一個子類,并且該Activity類由幾個之前說過的應(yīng)用程序框架提供的視圖組成用戶接口,實現(xiàn)對事件的響應(yīng)。絕大部分的應(yīng)用都會包含多個屏幕,例如名片管理的應(yīng)用,一個屏用于顯示所有的聯(lián)系人,另一個屏用于顯示其中某個聯(lián)系人的詳細(xì)信息,可能還會有用于分組信息或者用于系統(tǒng)設(shè)定的屏。對于這些,每一個屏都是一個Activity。當(dāng)一個新的Activity執(zhí)行以后,前一個Activity將暫停,并保存到系統(tǒng)歷史堆棧當(dāng)中,用戶可以返回到歷史堆棧中的
46、上一個Activity。當(dāng)該Activity不用時可以從歷史堆棧中刪除。 2.2.3 Intent Receiver Intent Receiver有的地方也叫做Broadcast Receiver。當(dāng)你希望你的應(yīng)用能夠捕獲一個外部事件并作出響應(yīng)時,比如手機(jī)快沒電了,收到一條新的短信息等。這時你就可以使用一個Intent Receiver。因為Intent Receiver只是在一個你所關(guān)注的事件發(fā)生時,會給那些關(guān)注該事件的應(yīng)用程序發(fā)送一個通知,所以它并不會生成一個UI。同樣的Intent Receiver也需要在AndroidManifest.xml中進(jìn)行注冊。當(dāng)一個你所關(guān)注的時間發(fā)生
47、時,我們的應(yīng)用不需要主動去調(diào)用intent receiver,系統(tǒng)會在一個合適的時候去調(diào)用我們的程序的。 2.2.4 Service Service是一段長生命周期的,沒有用戶界面的程序。我們舉一個播放器的例子,來說明Service程序。當(dāng)一個播放器在前臺運行時我們會看到應(yīng)用程序提供的一個屏,也就是之前說的Activity,這個Activity提供給用戶一些操作播放器如播放、停止、下一曲等操作以及顯示一些歌曲和播放列表信息的功能。但是當(dāng)播放器被切換到后臺以后,所有的Activity都放到歷史堆棧中了,而這時播放器任然繼續(xù)進(jìn)行播放,而當(dāng)一首歌曲播放完了以后,還會根據(jù)播放列表中的信息播放下一
48、首歌曲。完成這些功能的組件就是Service。當(dāng)播放器的Activity利用Context.startService()方法啟動一個Service后,這個播放器就能夠在后臺持續(xù)的播放音樂了。還有,對于一個Service組件,我們可以使用Context.bindService()連接到Service上,就能通過該Service提供的接口與之進(jìn)行通信。 2.2.5 Content Provider Content Provider提供給你的應(yīng)用程序與其他應(yīng)用程序共享數(shù)據(jù)的一個功能。我們的應(yīng)用程序可以通過Content Provider提供的一些方法來處理或者保存其他應(yīng)用程序Content P
49、rovider中的數(shù)據(jù),這樣來達(dá)到數(shù)據(jù)的共享。 2.2.6 AndroidManifest.xml 之前提到過,每一個Android應(yīng)用程序都包括了一個AndroidManifest.xml配置文件,它對應(yīng)了應(yīng)用程序的說明,包括運行權(quán)限,組件的注冊等。其實AndroidManifest.xml配置文件和使用Visual Studio開發(fā)中的Manifest.xml很相似,但是VS的可視化的界面的緣故,只需進(jìn)行簡單的設(shè)置,就能自動生成該文件,所以不少的VS程序員會忽略掉該文件的存在。但是在Android應(yīng)用程序開發(fā)中,該文件是不可缺少的。應(yīng)用程序在運行前通過AndroidManifest
50、.xml文件向系統(tǒng)提供一些必要的信息,讓系統(tǒng)知道該應(yīng)用程序應(yīng)該如何配置。
Android應(yīng)用
AndroidManifest.xml
Activity
Intent Receiver
Service
Content Provider
圖2-3 AndroidManifest.xml示意圖
先舉一個AndroidManifest.xml文件的例子然后從該例子中詳細(xì)描述一下這個配置文件:
01
02 51、. hello"
04 android: versionCode="1"
05 android: versionName="1.0.0">
06 52、 android: name="android.intent.category.LAUNCHER" />
11
53、個AndroidManifest配置文件中必須有且只有一對“manifest”標(biāo)簽,所有AndroidManifest中的描述都應(yīng)該包含在這對標(biāo)簽中。 第3~5行是“manifest”標(biāo)簽的屬性,這個例子中的 package屬性說明應(yīng)用程序的入口在test.hello這個包下面。而“android:versionCode”和“android:versionName”兩個可選的屬性則是說明應(yīng)用程序的版本號,其中“android:versionName”是面向用戶的版本號,而“android:versionCode”則是開發(fā)者使用的內(nèi)部版本號。 第6行和第13行是一對“applicatio
54、n”標(biāo)簽,該標(biāo)簽中定義了所有應(yīng)用程序所使用的Activity、Intent Receiver、Service等。該標(biāo)簽的“android: icon”屬性定義了應(yīng)用程序顯示在Android主界面中的圖標(biāo)而"@drawable/icon"表示該應(yīng)用程序圖標(biāo)的路徑為/res/drawable/icon。 第7行和第12行是一對“activity”標(biāo)簽。在Android的應(yīng)用程序當(dāng)中所有定義好的的Activity都需要在AndroidManifest.xml中添加一組“activity”標(biāo)簽,不然的話即使你定義了,但是Android應(yīng)用程序也找不到。在上面給出的例子中,僅僅有一組“activit
55、y”標(biāo)簽,這也說明了給出的例子的應(yīng)用程序只有一個Activity。緊接其后的是“activity”標(biāo)簽的屬性,“android: name”屬性表示了Activity所對應(yīng)的類,上述例子中的類是HelloAndroid類,結(jié)合package的路徑,它表示的是test.hello.HelloAndroid類。另外,在屬性中“android: name”的值可以直接寫為“HelloAndroid”,因為其已經(jīng)定義到了test.hello包下面了?!癮ndroid:label”則指定了該Activity代號。 剩下的8~11行是一對定義了Activity性質(zhì)的“intent-filter”標(biāo)簽以
56、及“intent-filter”包含的另外兩個標(biāo)簽“action”和“category”標(biāo)簽之所以這幾個標(biāo)簽一同說是因為“intent-filter”標(biāo)簽的性質(zhì)是由“action”和“category”標(biāo)簽來說明的。也就是說AndroidManifest中上層的標(biāo)簽的性質(zhì)由下層標(biāo)簽來描述。應(yīng)用程序的組件為了告訴Android該組件能夠相應(yīng)和處理那些Intent請求可以使用一個或者多個的“intent-filter”的標(biāo)簽,同時一個“intent-filter”標(biāo)簽至少應(yīng)該包含一個“action”標(biāo)簽。我們再回到例子的這四行代碼中,“action”標(biāo)簽中的“android:name”屬性的值為a
57、ndroid.intent.action.MAIN,表明該Activity是這個應(yīng)用程序的進(jìn)入點,另外,“category”標(biāo)簽中的“android:name”屬性值為android.intent.category.LAUNCHER說明了當(dāng)啟動了應(yīng)用程序以后,應(yīng)當(dāng)先執(zhí)行這個Activity。 對于AndroidManifest.xml配置中還有“receiver”,“service”和“provider”標(biāo)簽,分別對應(yīng)了剩下的Intent Receiver、Service和Content Provider三個應(yīng)用的組成部分。同樣,每個Intent Receiver和Service以及Cont
58、ent Provider都需要到AndroidManifest.xml中進(jìn)行描述后才能找到。 2.3 Android 文件系統(tǒng) 當(dāng)Android系統(tǒng)部署到相應(yīng)的硬件平臺上以后,和Linux系統(tǒng)一樣,勢必有一個系統(tǒng)文件夾,用來存放一些系統(tǒng)程序和數(shù)據(jù)以及一些用戶數(shù)據(jù)。下面就將介紹一下Android的系統(tǒng)文件夾 2.3.1 系統(tǒng)文件夾分析 ①\system\app:這里存放的程序為系統(tǒng)默認(rèn)的組件自己安裝的引用程序一般不放在該文件夾下。同時可以看到,該文件夾下的文件都是APK格式的文件。 ②\system\bin:該目錄下都是系統(tǒng)的本地程序,主要為Linux系統(tǒng)自帶的組件。而從文件夾名
59、字可以看出都是二進(jìn)制代碼程序。這個文件夾和Linux系統(tǒng)下的\system\bin文件夾沒多大區(qū)別。 ③\system\etc:與Linux系統(tǒng)下的\system\etc文件夾沒有本質(zhì)的區(qū)別,都用于保存系統(tǒng)的配置文件。 ④\system\fonts:從名字上可以看出用于存放字體的文件夾。 ⑤\system\framework:主要存放核心文件,其文件后綴名為jar,可以看出為系統(tǒng)構(gòu)架平臺。 ⑥\system\lib:用于存放系統(tǒng)底層庫。 ⑦\system\media:存放鈴聲的文件夾 ⑧\system\sounds:用于存放音樂文件。 ⑨\system\usr:用戶文件夾,如同L
60、inux中的usr文件夾一樣,存放一些用戶信息,包含鍵盤布局,用戶命令,共享和時間區(qū)域信息文件。 從以上系統(tǒng)文件夾的構(gòu)造中看出,Android的系統(tǒng)文件夾結(jié)構(gòu)繼承了Linux系統(tǒng)的系統(tǒng)文件夾組成,但是又有一些Android獨特的地方,就是其在Linux系統(tǒng)文件夾的基礎(chǔ)上進(jìn)行了一些刪減,使得該系統(tǒng)文件夾更加精簡,更加一目了然。 2.3.2 系統(tǒng)構(gòu)架與系統(tǒng)文件的對應(yīng) 在這之前介紹了Android的系統(tǒng)架構(gòu),但是這個架構(gòu)如何在Android系統(tǒng)中體現(xiàn)呢?下面將介紹一下,同樣從下到上的順序進(jìn)行描述。 Linux內(nèi)核層。Linux內(nèi)核給其上層的軟件和下層硬件間建立起一個抽象層,其內(nèi)核的組件都存
61、放在\system\bin文件夾下面,如\system\bin\system_server 系統(tǒng)服務(wù)和\system\bin\dbus-daemon 系統(tǒng)BUS總線監(jiān)控以及\system\bin\app_process 系統(tǒng)進(jìn)程等。 Android Runtime和函數(shù)庫層。其中函數(shù)庫都放于\system\lib下,如音頻庫\system\lib\libaudio.so和系統(tǒng)C庫\system\lib\libc.so。同時Android Runtime中的Android Libraries也存放在這個文件夾下,與其相對應(yīng)的文件為\system\lib\libandroid_runtime.s
62、o。而Dalvik虛擬機(jī)則放于\system\bin文件夾下,它的對應(yīng)文件為\system\bin\dalvikvm。 應(yīng)用程序框架層。該層的文件一般都存放到\system\framework,如核心庫\system\framework\core.jar,Android系統(tǒng)應(yīng)用程序框架中的一些主要如Activity Manager,Content Provider等。 應(yīng)用程序?qū)?。這層的本地應(yīng)用文件都存于\system\app文件夾下,如提供短信和彩信功能的\system\app\Mms.apk、提供電話撥號功能的\system\app\Phone.apk和能夠提供Google服務(wù)的Goo
63、gle程序包\system\app\GoogleApps.apk。但是像MSN第三方軟件保存位置為\data\文件夾下。3 Android的開發(fā) 3.1 Android開發(fā)工具 前面說過,Android的上層應(yīng)用程序是用Java語言開發(fā)的,同時需要基于Dalvik虛擬機(jī),所以Google公司推薦使用主流的Java繼承開發(fā)環(huán)境 Eclipse。有了Eclipse還不夠,因為使用Java語言進(jìn)行開發(fā),應(yīng)該有由SUN公司提供的Java SDK(其中包含了JRE:Java Runtime Environment)。另外,Android的應(yīng)用程序開發(fā)還是和Java開發(fā)有一定區(qū)別,所以還需有一個G
64、oogle提供的Android SDK。有了這三個軟件就可以開發(fā)Android應(yīng)用程序了。 3.2 Android開發(fā)平臺的搭建 Android開發(fā)平臺搭建步驟很簡單,但是和我們的論文沒多大關(guān)系,所以具體步驟參見附錄1。 當(dāng)平臺搭建好以后需要創(chuàng)建一個Android Virtual Device,這一步是很關(guān)鍵的一步,如果不創(chuàng)建這個AVD的話,在Eclipse中編譯運行Android應(yīng)用程序時就會提示找不到AVD,從而無法編譯。在DOS界面下運行Android SDK文件夾中tools目錄下的android.bat工具,其命令是android create avd –name avd15r
65、1 – target 2,使用這個命令之后會提示是否創(chuàng)建一個AVD,輸入yes之后會提示設(shè)置AVD的一些屬性,如內(nèi)存信息等。要說明的是name后面的avd15r1是Android Virtual Device的名字,可以自由選取。而我起這個名字的意義是avd使用1.5r1版本的SDK。 簡單的幾步就將Android的開發(fā)平臺搭建好了,雖然我使用的是Windows7操作系統(tǒng),但是方法同樣適用于Windows xp等其他Windows 平臺。在一個應(yīng)用程序設(shè)計好了以后,點擊Eclipse中的run,就可以看到啟動了一個叫做avd15r1的Android模擬器,同時,在模擬器中就能找到你所編寫的應(yīng)
66、用程序。 3.3 系統(tǒng)功能介紹 本系統(tǒng)功能主要有通信錄功能,游戲,文件瀏覽器,視頻播放器。 通信錄功能:模仿手機(jī)中的通信錄功能實現(xiàn)對手機(jī)聯(lián)系人的添加,修改,刪除。 游戲:此游戲是一款簡單的坦克大戰(zhàn)游戲通過方向鍵控制己方坦克的移動方向,確認(rèn)鍵發(fā)射子彈,并記錄消滅敵人的數(shù)量。 文件瀏覽器:通過此功能可以瀏覽多種格式的文本文件 視頻播放器:此功能可實現(xiàn)視頻的播放 3.3.1 系統(tǒng)功能模塊圖: 主界面 游戲 視頻播放器 文件瀏覽器 圖 通信錄 3.3.2 功能流程圖 開機(jī)進(jìn)入主界面 點擊主界面功能模塊圖標(biāo) 判斷用戶點擊的圖標(biāo) 通信錄 文件瀏覽器 游戲 視頻播放器 點擊視頻圖標(biāo) 點擊通信錄標(biāo) 點擊游戲標(biāo) 點擊文件瀏覽器圖標(biāo) 3.3.3 功能實現(xiàn)界面 主界面: 游戲界面: 通信錄界面:
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題黨課講稿:以高質(zhì)量黨建保障國有企業(yè)高質(zhì)量發(fā)展
- 廉政黨課講稿材料:堅決打好反腐敗斗爭攻堅戰(zhàn)持久戰(zhàn)總體戰(zhàn)涵養(yǎng)風(fēng)清氣正的政治生態(tài)
- 在新錄用選調(diào)生公務(wù)員座談會上和基層單位調(diào)研座談會上的發(fā)言材料
- 總工會關(guān)于2025年維護(hù)勞動領(lǐng)域政治安全的工作匯報材料
- 基層黨建工作交流研討會上的講話發(fā)言材料
- 糧食和物資儲備學(xué)習(xí)教育工作部署會上的講話發(fā)言材料
- 市工業(yè)園區(qū)、市直機(jī)關(guān)單位、市紀(jì)委監(jiān)委2025年工作計劃
- 檢察院政治部關(guān)于2025年工作計劃
- 辦公室主任2025年現(xiàn)實表現(xiàn)材料
- 2025年~村農(nóng)村保潔員規(guī)范管理工作方案
- 在深入貫徹中央8項規(guī)定精神學(xué)習(xí)教育工作部署會議上的講話發(fā)言材料4篇
- 開展深入貫徹規(guī)定精神學(xué)習(xí)教育動員部署會上的講話發(fā)言材料3篇
- 在司法黨組中心學(xué)習(xí)組學(xué)習(xí)會上的發(fā)言材料
- 國企黨委關(guān)于推動基層黨建與生產(chǎn)經(jīng)營深度融合工作情況的報告材料
- 副書記在2025年工作務(wù)虛會上的發(fā)言材料2篇