編輯:關於Android編程
2003 年 Andy Rubin 創辦 Android 公司
2005 年 Google 收購 Android 公司
2007 年成立開放手持設備聯盟(OHA)
2008 年發布第一款手持設備 HTC Dream(G1 & 1.0)
2010 年發布 Nexus 系列設備
2011 年發布 4.0 及 Android Design 規范
2012 年發布 4.2 及 Google Glass
2013 年發布 4.4 及 ART 預覽
2014 年發布 5.0 及 Material Design
2014 年發布 Android Wear、TV、Auto 平台
Android 是Google開發的基於Linux平台的開源手機操作系統。它包括操作系統、用戶界面和應用程序 —— 移動電話工作所需的全部軟件,而且不存在任何以往阻礙移動產業創新的專有權障礙。Android采用WebKit浏覽器引擎,具備觸摸屏、高級圖形顯示和上網功能,用戶能夠在手機上查看電子郵件、搜索網址和觀看視頻節目等,比iPhone等其他手機更強調搜索功能,界面更強大,可以說是一種融入全部Web應用的單一平台。
Android 的系統架構和其操作系統一樣,采用了分層的架構。從上面的架構圖看,Android分為5層,從高層到低層分別是:application應用程序層、applicationframework應用程序框架層、native libraries原生庫,Android 運行時與 HAL,linux核心層。但在多數情況下,會將libraries運行庫和Android 運行時(ART)合並為一個層級,於是出現了下面這張Android系統架構圖:
該層提供一些核心應用程序包,例如電子郵件、短信、日歷、地圖、浏覽器和聯系人管理等。同時,開發者可以利用Java語言設計和編寫屬於自己的應用程序,而這些程序與那些核心應用程序彼此獨立。
應用層的幾個特點:
(1)設備上運行的所有程序(App)
(2)系統應用、第三方應用(應用、游戲)
(3)使用 Java 開發
(4)使用 C/C++ 開發功能類庫(圖形、算法)
(5)在應用框架(framework)之上
應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。幫助程序員快速的開發程序,並且該應用程序重用機制也使用戶可以方便的替換程序組件。
應用程序框架層提供開發Android應用程序所需的一系列類庫框架,使開發人員可以進行快速的應用程序開發,方便重用組件,也可以通過繼承實現個性化的擴展。具體包括的模塊如表:
系統類庫大部分由C/C++編寫,所提供的功能通過Android應用程序框架為開發者所使用,如資源文件管理、基礎算法庫。
主要的第三方類庫及說明如下表:
第三方類庫,極大的加快了Android應用的開發周期。
除上表列舉的主要系統類庫之外,Android NDK(Native Development Kit),即Android原生庫,也十分重要。NDK為開發者提供了直接使用Android系統資源,並采用C或C++語言編寫程序的接口。因此,第三方應用程序可以不依賴於Dalvik虛擬機進行開發。實際上,NDK提供了一系列從C或C++生成原生代碼所需要的工具,為開發者快速開發C或C++的動態庫提供方便,並能自動將生成的動態庫和java應用程序一起打包成應用程序包文件,即.apk安裝包。
注意:使用原生庫無法訪問應用框架層API,兼容性可能無法保障。而且從安全性角度考慮,Android原生庫用非類型安全的程序語言C,C++編寫,更容易產生安全漏洞,原生庫的缺陷(bug)也可能更容易直接影響應用程序的安全性。
主要包括:Java 核心庫、Dalvik VM(5.0 之前)、ART runtime(5.0 正式啟用)、HAL(硬件抽象層)。
核心庫提供了Java5 se API的多數功能,並提供Android的核心API,如android.os,android.net,android.media等。該核心庫提供了JAVA編程語言核心庫的大多數功能。
Dalvik VM是基於寄存器的java虛擬機,是在2010年5月21日,Google公司發布的Android2.2版本中正式使用,一直沿用到Android5.0版本。借助新的Dalvik JIT編譯器(Just In Time,即時編譯器),CPU密集型應用的速度比Android2.1快2-5倍,Android2.2還改進了App可以安裝在SD卡(外部存儲)上。Dalvik虛擬機主要是完成對生命周期的管理、堆棧的管理、線程的管理、安全和異常的管理以及垃圾回收等重要功能。
DalvikVM前身是基於apache的java虛擬機,並被改進以適應低內存,低處理器速度的移動設備環境。DalvikVM依賴於Linux內核,實現進程隔離與線程調試管理,安全和異常管理,垃圾回收等重要功能。
本質而言,DalvikVM並非傳統意義上的java虛擬機(JVM)。DalvikVM不僅不按照Java虛擬機的規范來實現,而且兩者不兼容。
每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。 Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然後通過SDK中 的 "dx" 工具轉化成.dex格式由虛擬機執行。
Dalvik虛擬機依賴於linux內核的一些功能,比如線程機制和底層內存管理機制。
雖然DalvikVM在Android2.2版本是一次飛躍,但Dalvik虛擬機從DEX(Dalvik Executable)格式的文件中讀取指令與數據,進行解釋運行,JIT 在運行時將字節碼翻譯為本地機器指令,運行一次就要編譯一次,性能還是很低。於是Android4.4版本支持了ART模式,並在Android5.0正式將編譯模式由ART取代DalvikVM成為默認選項。
ART 采用預編譯AOT(ahead-of-time)技術,在應用程序安裝時,將程序代碼一次性轉化為機器語言,省去了程序在運行時每次編譯的時間,加快了程序運行速度,使得電量消耗更少,系統更加流暢。
鑒於許多硬件設備廠商不希望公開其設備驅動的源代碼,如果能將android的應用框架層與linux系統內核的設備驅動隔離,使應用程序框架的開發盡量獨立於具體的驅動程序,則android將減少對Linux內核的依賴。HAL由此而生,它是對Linux內核驅動程序進行的封裝,將硬件抽象化,屏蔽掉了底層的實現細節。HAL規定了一套應用層對硬件層讀寫和配置的統一接口,本質上就是將硬件的驅動分為用戶空間和內核空間兩個層面;Linux內核驅動程序運行於內核空間,硬件抽象層運行於用戶空間。
HAL(Hardware Abstract Layer硬件抽象層)是Google因應廠商「希望不公開源碼」的要求下,所推出的新觀念。雖然 HAL 現在的「抽象程度」還不足,現階段實作還不是全面符合 HAL的架構規劃。
HAL設備驅動抽象使得應用程序和驅動程序之間很明顯地區分開來。 驅動抽象促進了應用程序代碼的可重用性,應用程序和底層硬件的通信依靠統一的接口函數,底層硬件的改動對應用程序的代碼沒有影響。而且,HAL標准使得和已有外設相匹配的新外設的驅動程序編寫起來更加簡單。
(1)Dalvik VM從DEX(Dalvik Executable)格式的文件中讀取 指令與數據,進行解釋運行。DEX文件由傳統的,編譯產生的 CLASS文件,經dx工具軟件處理後生成。dexopt 把 dex 優化 為 odex(字節碼);
(2)JIT 在運行時將字節碼翻譯為本地機器指令;
(3)運行前編譯,性能低。
(1)dex2oat 把 dex 翻譯為 oat(機器指令);
(2)OAT 在程序安裝時執行;
(3)程序安裝後所占存儲空間略大。
Android以Linux操作系統內核為基礎,借助Linux內核服務實現硬件設備驅動,進程和內存管理,網絡協議棧,電源管理,無線通信、設備驅動、文件系統、Binder (IPC) 驅動等核心功能。Android4.0版本之前基於Linux2.6系列內核,4.0及之後的版本使用更新的Linux3.X內核,並且兩個開源項目開始有了互通。Linux3.3內核中正式包括一些Android代碼,可以直接引導進入Android。Linux3.4將會增添電源管理等更多功能,以增加與Android的硬件兼容性,使Android在更多設備上得到支持。
Android內核 對Linux內核進行了增強,增加了一些面向移動計算的特有功能。例如,低內存管理器LMK(Low Memory Keller),匿名共享內存(Ashmem),以及輕量級的進程間通信Binder機制等。這些內核的增強使Android在繼承Linux內核安全機制的同時,進一步提升了內存管理,進程間通信等方面的安全性。下表列舉了Android內核的主要驅動模塊:
簡介現在在Android上加載圖片的框架都已經爛大街了,所以我們這裡也不說誰好誰壞,當然也不做比較了,因為得出的結果都是片面的,沒有誰好誰壞只有適不適合需求罷了起因是在泰
貌似已經很晚了,但是還是想記下筆記,想讓今天完滿。 在ListView中加了checkBox,可是發現點擊改變其選中狀態的時候,發現其位置錯亂。狀態改變的並
我們平時開發中總會遇見一些奇葩的需求,為了實現這些需求我們往往絞盡腦汁有時候還茶不思飯不香的,有點誇張了(*^__^*)……我印象最深的一個需
最近用上了印象筆記,覺得android 版的底部導航欄挺不錯的,好多應用裡面都有用到,想著自己動手實現一下,不多說,先上圖: 要完成這樣的效果。需要自定義ViewGrou