Android 培训课件编写--- 第1章 Android应用开发概述
第1章 Android應用開發概述
隨著Android系統的迅猛發展,它已經成為全球范圍內具有廣泛影響力的操作系統。Android系統已經不僅僅是一款手機的操作系統,它越來越廣泛的被應用于平板電腦、可佩戴設備、電視、數碼相機等設備上,這也造就了目前Android開發人才需求的快速增長,從大趨勢上看,Android軟件人才的需求將越來越大。
從2007年11月5日谷歌公司正式向外界展示了這款名為Android的操作系統至今,Android已經經歷了多個版本的更新,最新的版本為2016年5月18日發布的Android 7.0 開發者預覽,在Android系統的命名方式上,谷歌一直按照字母表的方式來進行,并且選用的代號名稱全部都為食物,比如Android 4.4 KitKat就是用巧克力的名字來命名的,而Android 5.0 Lollipop和Android 6.0 Marshmallow則分別用棒棒糖和棉花糖來命名。而作為下一代Android系統,Android N的正式名稱現在也在征集當中。
1.1?Android發展史與現狀
自Android系統首次發布至今,Android經歷了很多的版本更新,下表列出了Android系統的不同版本的發布時間及對應的版本號:
| 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 | 2014年10月15日 | Lime Pie(酸橙派) |
| Android6.0 | 2015年9月30日 | Marshmallow(棉花糖) |
| Android7.0 | 待定 | L待定 |
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系統可以對這些服務進行無縫的結合。
?
總結
以上是生活随笔為你收集整理的Android 培训课件编写--- 第1章 Android应用开发概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中的数学运算
- 下一篇: flutter实战!一个Android应