01_Android應用開發環境_01_android發展史及系統架構

來源:互聯網
上載者:User

標籤:

1.1 Android發展史與現狀

Andy Rubin創立22個月後→(2005年)Google收購。

2008 Patrick Brady於Google I/O 演講“Anatomy & Physiology of an Android”,並提出的 Android HAL 架構圖。

Android版本升級
Android系統今後將繼續每半年一次的升級步伐,分別定在每年的夏天和年終。每代Android系統都將以食物命名,比如1.5版叫做 Cupcake(紙杯蛋糕),1.6版為Donut(甜甜圈),然後是Eclair(法式奶油夾心甜點)和Flan(水果餡餅)。Donut將把社交網路功能作為升級重點,在“手機的各種體驗中”都增加社交網路元素。
1.5 (Cupcake)
基於Linux Kernel 2.6.27 2009年4月30日,官方1.5版本(Cupcake)的Android發布。主要的更新如下:
● 拍攝/回放視頻,並支援上傳到youtube
● 支援立體聲藍芽耳機,同時改善自動配對效能
● 最新的採用WebKit技術的瀏覽器,支援拷貝/粘帖和頁面中搜尋
● GPS效能大大提高
● 螢幕虛擬鍵盤
● 主畫面增加音樂播放器和相框widgets
● 應用程式自動隨著手機旋轉
● 簡訊,Gmail,日曆,瀏覽器的使用者介面大幅改善,比如說Gmail現在可以大量刪除郵件了
● 相機啟動速度加快,拍攝圖片可以直接上傳到picasa
● 來電照片顯示
1.6 (Donut)
基於Linux Kernel 2.6.29 2009年9月15日, 1.6(Donut)版本SDK發布。主要的更新如下:
● 完全重新設計的Android Market
● 手勢支援
● 支援CDMA網路
● 文字轉語音系統(TXT-2-speech)
● 快速搜尋框
● 全新的拍照介面
● 應用程式耗電查看
● 支援VPN
● 支援更多的螢幕解析度
● 支援OpenCore2媒體引擎
● 新增面向視覺或聽覺困難人群的易用性外掛程式
2.0/2.0.1/2.1(Eclair)
基於Linux Kernel 2.6.29 2009年10月26日, 2.0(Eclair)版本SDK發布。主要的更新如下:
● 最佳化硬體速度
● "Car Home"程式
● 支援更多的螢幕解析度
● 重整介面
● 新的瀏覽器的使用者介面和支援HTML5
● 新的連絡人名單
● 更好的白色/黑色背景比率
● 改進Google Maps 3.1.2
● 支援Microsoft Exchange
● 支援內建相機閃光燈
● 數字變焦
● 改進的虛擬鍵盤
● 藍芽2.1
Android的代號序列會按甜點名字中首個英文字母(C、D、E、F)的排列順序。
下一個版本的Android將會命名為Froyo(凍優酪乳,基於Linux Kernel 2.6.32)。Froyo 之後的版本的Android將會命名為Gingerbread(薑餅,基於Linux Kernel 2.6.33/34)。

Android版本

發布日期

代號

Android 1.1

Android 1.5

2009年4月30日

Cupcake(紙杯蛋糕)

Android 1.6

2009年9月15日

Donut(炸面圈)

Android 2.0/2.1

2009年10月26日

Eclair(長鬆餅)

Android 2.2

2010年5月20日

Froyo(凍優酪乳)

Android 2.3

2010年12月6日

Gingerbread(薑餅)

Android 3.0/3.1/3.2

2011年2月22日

Honeycomb(蜂巢)

Android 4.0

2011年10月19日

Ice Cream Sandwich(冰淇淋三明治)

Android 4.1

2012年6月28日

Jelly Bean(果凍豆)

Android 4.2

2012年10月8日

Jelly Bean(果凍豆)

Android5.0

待定

Lime Pie(酸橙派)

1.2 Android系統的架構與特性

    1.2.1 Android系統架構

    Android系統的底層是建立在Linux系統之上的,它採用軟體疊層(Software Stack)的方式進行構建。使得層與層之間相互分離,明確各層的分工。這種分工保證了層與層之間的低苟合,當下層發生改變的時候,上層應用程式無需做任何改變。

為Android系統的系統架構圖:

    可知,Android系統分為四個層,從高到底分別是:應用程式層(Application)、應用程式架構層(Application Framework)、系統運行庫層(Libraries)和Linux核心層(Linux Kernel)。

Android作業系統可以在四個主要層面上分為5個部分:

1. 應用程式層(Application)

    Android系統包含了一系列核心應用程式,包括電子郵件、簡訊SMS、日曆、撥號器、地圖、瀏覽器、連絡人等。這些應用程式都是用Java語言編寫。本書重點講解如何編寫Android系統上啟動並執行應用程式,在程式分層上,與系統核心應用程式平級。

2. 應用程式架構層(Application Framework)

    Android應用程式架構提供了大量的API供開發人員使用,Android應用程式的開發,就是調用這些API,根據需求實現功能。

    應用程式架構是應用程式的基礎。為了軟體的複用,任何一個應用程式都可以開發Android系統的功能模組,只要發布的時候遵循應用程式架構的規範,其它應用程式也可以使用這個功能模組。

3. 系統運行庫層(Libraries)

    Android系統運行庫是用C/C++語言編寫的,是一套被不同組件所使用的函數庫組成的集合。一般來說,Android應用開發人員無法直接調用這套函數庫,都是通過它上層的應用程式架構提供的API來對這些函數庫進行調用。

    下面對一些核心庫進行簡單的介紹:

Libc:從BSD系統派生出來的標準C系統庫,在此基礎之上,為了攜帶型Linux系統專門進行了調整。

Medio Framework:基於PacketView的OpenCORE,這套媒體庫支援播放與錄製硬碟及視頻格式的檔案,並能查看靜態圖片。

Surface Manager:在執行多個應用程式的時,負責管理顯示與存取操作間的互動,同時負責2D繪圖與3D繪圖進行顯示合成。

WebKit:Web瀏覽器引擎,該引擎為Android瀏覽器提供支援。

SGL:底層的2D映像引擎。

3D libraries:基於OpenGL ES 1.0API,提供使用軟硬體實現3D加速的功能。

FreeType:提供位元影像和向量字型的支援。

SQLite:輕量級的關係型資料庫。

4. Android運行時

    Android運行時由兩部分完成:Android核心庫和Dalvik虛擬機器。其中核心庫集提供了Java語言核心庫所能使用的絕大部分功能,Dalvik虛擬機器負責運行Android應用程式。

    雖然Android應用程式通過Java語言編寫,而每個Java程式都會在Java虛擬機器JVM內運行,但是Android系統畢竟是運行在行動裝置上的,由於硬體的限制, Android應用程式並不使用Java的虛擬機器JVM來運行程式,而是使用自己獨立的虛擬機器Dalvik VM,它針對多個同時高效啟動並執行虛擬機器進行了最佳化。每個Android應用程式都運行在單獨的一個Dalvik虛擬機器內,因此Android系統可以方便對應用程式進行隔離。

5. Linux核心

Android系統是基於Linux2.6之上建立的作業系統,它的Linux核心為Android系統提供了安全性、記憶體管理、進程管理、網路通訊協定棧、驅動模型等核心系統服務。Linux核心協助Android系統實現了底層硬體與上層軟體之間的抽象。

1.2.2 Dalvik VM和JVM的區別

    JVM(Java虛擬機器)是一個虛構出來的運行Java程式的運行時,是通過在實際的電腦上模擬類比各種電腦功能的實現。它具有完善的硬體架構(如處理器、堆棧、寄存器等),還具有相應的指令系統,使用JVM就是使Java程式支援與作業系統無關。理論上在任何作業系統中,只要有對應的JVM,即可運行Java程式。

    Dalvik VM是在Android系統上運行Android程式的虛擬機器,其指令集是基於寄存器架構的,執行特有的檔案格式-dex位元組碼來完成對象生命週期管理、堆棧管理、線程管理、安全異常管理、記憶體回收等重要功能。

    由於Android應用程式的開發程式設計語言是Java,而Java程式運行在JVM(Java虛擬機器)上的,因此有些人會把Android的虛擬機器DalvikVM和JVM弄混淆,但是實際上Dalvik並未遵守JVM規範,而且兩者也是互不相容。

    從Dalvik VM和JVM的編譯過程分析,它們的編譯過程如下:

        JVM:.java→.class→.jar

        Dalvik VM:.java→.class→.dex

    從它們的編譯過程可以看出,JVM啟動並執行是.class檔案的Java位元組碼,但是Dalvik VM啟動並執行是其轉換後的dex(Dalvik Executable)檔案。JVM位元組從.class檔案或者JAR包中載入位元組碼然後運行,而Dalvik VM無法直接從.class檔案或JAR包中載入位元組碼,它需要通過DX工具將應用程式所有的.class檔案編譯成一個.dex檔案,Dalvik VM則運行這個.dex檔案。

    顯示了Dalvik VM與JVM編譯過程的區別:

    可以看出,Dalvik VM把.java檔案編譯成.class後,會對.class進行重構,整合的基本元素(常量池、類定義、資料區段),最後壓縮寫進一個.dex檔案中。其中,常量池描述了所有的常量,包括引用、方法名、數值常量等;類定義包括訪問標識、類名等基本資料;資料區段中包含各種被VM指定的方法代碼以及類和方法的相關資訊和執行個體變數。這種把多個.class檔案進行整合的方法,大大提高了Android程式的運行速度,例如:應用程式中多個類定義了字串常量TAG,而在JVM中,會編譯成多個.class檔案,每個.class檔案的常量池中,均包含這個TAG常量,但是Dalvik VM在編譯成.dex檔案之後,其常量池裡只有一個TAG常量。

    JVM和Dalvik VM還有一點非常重要的不同,就是基於的架構不同。JVM是基於棧的架構,而Dalvik VM是基於寄存器的架構。相對於基於棧的JVM而言,基於寄存器的Dalvik VM實現雖然犧牲了一些硬體上的通用性,但是它在代碼的執行效率上要更勝一籌。一般來講,VM中指令的解釋執行的時間主要花費在以下三個方面:

分髮指令;

訪問運算數;

執行運算;

    其中分髮指令這個環節對效能的影響最大。在基於寄存器的Dalvik VM中,可以更有效減少冗餘指令的分發,減少記憶體的讀寫訪問。

    從JVM和Dalvik VM的區別上來說,Dalvik VM主要是針對Android這個嵌入式作業系統的特點進行了各種最佳化,使其更省電、更省記憶體、運行效率更高,但是犧牲了一些JVM的與平台無關的特性。實際上,Dalvik VM本就是為Android設計的,無需考慮其它平台的問題。這裡只是介紹了JVM和Dalvik VM的兩個重要的區別,畢竟本書並不是講解Android核心的,這裡只是點明Dalvik VM的特點,讀者對這部分的內容瞭解即可。

1.2.3 Android系統平台的優勢

Android系統相對於其它作業系統,有如下幾點優勢:

1. 開放性

    首先就是Android系統的開放性,其開發平台允許任何移動終端廠商加入到Android聯盟中來,降低了開發門檻,使其擁有更多的開發人員,隨著使用者和應用的日益豐富,也將推進Android系統的成熟。同時,開放性有利於Android裝置的普及以及市場競爭力,這樣有利於消費者買到更低價位的Android裝置。

2. 豐富的硬體選擇

    同樣由於Android系統的開放性,眾多硬體廠商可以推出各種的搭載Android系統的裝置。現如今,Android系統不僅僅只是運行在手機上,越來越多的裝置開始支援Android系統,如電視、可佩戴裝置、數位相機等。

3. 便於開發

    Google開放了Android的系統源碼,提供了開發人員一個自由的開發環境,不必受到各種條條框框的束縛。

4. Google服務的支援

    Google公司作為一個做服務的公司,它提供了如地圖、郵件、搜尋等服務,Android系統可以對這些服務進行無縫的結合。

01_Android應用開發環境_01_android發展史及系統架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.