什麼是Android?php
Android一詞的本義指「機器人」,同時也是Google於2007年11月5日宣佈的基於Linux平臺的開源手機操做系統的名稱,該平臺由操做系統、中間件、用戶界面和應用軟件組成,並且不存在任何以往阻礙移動產業創新的專有權障礙,號稱是首個爲移動終端打造的真正開放和完整的移動軟件。html
Android是一種以Linux爲基礎的開放源代碼操做系統,主要使用於便攜設備。目前還沒有有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操做系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,並組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其餘領域上。Android的主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2012年2月數據,Android佔據全球智能手機操做系統市場52.5%的份額,中國市場佔有率爲68.4%。python
什麼是Android手機?jquery
Android手機就是運行在谷歌Android手機操做系統上的手機,統稱爲Android手機,也可稱爲gphone手機。linux
名稱來源android
Android一詞最先出現於法國做家利爾亞當(Auguste Villiers de l'Isle-Adam)在1886年發表的科幻小說《將來夏娃》(L'ève future)中。他將外表像人的機器起名爲Android。Android的Logo是由Ascender公司設計的。其中的文字使用了Ascender公司專門製做的稱之爲「Droid 」 的字體。Android是一個全身綠色的機器人,綠色也是Android的標誌。顏色採用了PMS 376C和RGB中十六進制的#A4C639來繪製,這是Android操做系統的品牌象徵。有時候,它們還會使用純文字的Logo。ajax
版本類型數據庫
Android在正式發行以前,最開始擁有兩個內部測試版本,而且以著名的機器人名稱來對其進行命名,它們分別是:阿童木(Android Beta),發條機器人(Android 1.0)。後來因爲涉及到版權問題,谷歌將其命名規則變動爲用甜點做爲它們系統版本的代號的命名方法。甜點命名法開始於 Android 1.5 發佈的時候。做爲每一個版本表明的甜點的尺寸越變越大,而後按照26個字母數序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),鬆餅(Android 2.0/2.1),凍酸奶(Android 2.2),薑餅(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),根據最新消息新一代Android版本將命名爲果凍豆(Jelly Bean)。編程
各版本發佈時間瀏覽器
Android版本 | 發佈日期 |
Android 1.0 | 2008年9月 |
Android 1.5 Cupcake(紙杯蛋糕) | 2009年4月30日 |
Android 1.6 Donut(甜甜圈) | 2009年9月15日 |
Android 2.0/2.0.1/2.1 Eclair(鬆餅) | 2009年10月26日 |
Android 2.2/2.2.1 Froyo(凍酸奶) | 2010年5月20日 |
Android 2.3 Gingerbread(薑餅) | 2010年12月7日 |
Android 3.0 Honeycomb(蜂巢) | 2011年2月2日 |
Android 3.1 Honeycomb(蜂巢) | 2011年5月11日 |
Android 3.2 Honeycomb(蜂巢) | 2011年7月13日 |
Android 4.0 Ice Cream Sandwich(冰激凌三明治) | 2011年10月19日 |
Android 4.1 Jelly Bean(果凍豆) | 2012年6月28日 |
Android 4.2 Jelly Bean(果凍豆) | 2012年10月30日 |
Android 4.3 Jelly Bean(果凍豆) | 2013年7月24日 |
Android 4.4 KitCat(巧克力) | 2013年10月31日 |
Android 5.0 Lolipop(棒棒糖) | 2014年10月15日 |
Android 5.1 Lolipop(棒棒糖) | 2015年3月10日 |
Android平臺優點
1)、開放性
在優點方面,Android平臺首先就是其開放性,開發的平臺容許任何移動終端廠商加入到Android聯盟中來。顯著的開放性可使其擁有更多的開發者,隨着用戶和應用的日益豐富,一個嶄新的平臺也將很快走向成熟。
開放性對於Android的發展而言,有利於積累人氣,這裏的人氣包括消費者和廠商,而對於消費者來說,最大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將能夠用更低的價位購得心儀的手機。
2)、掙脫運營商的束縛
在過去很長的一段時間,特別是在歐美地區,手機應用每每受到運營商制約,使用什麼功能接入什麼網絡,幾乎都受到運營商的控制。自從 iPhone上市,用戶能夠更加方便地鏈接網絡,運營商的制約減小。隨着EDGE、HSDPA這些2G至3G移動網絡的逐步過渡和提高,手機隨意接入網絡已不是運營商口中的笑談。
3)、豐富的硬件選擇
這一點仍是與Android平臺的開放性相關,因爲Android的開放性,衆多的廠商會推出千奇百怪,功能特點各具的多種產品。功能上的差別和特點,卻不會影響到數據同步、甚至軟件的兼容。比如你從諾基亞Symbian風格手機一下改用蘋果iPhone,同時還可將Symbian 中優秀的軟件帶到iPhone上使用、聯繫人等資料更是能夠方便地轉移。
4)、不受任何限制的開發商
Android平臺提供給第三方開發商一個十分寬泛、自由的環境。所以不會受到各類條條框框的阻撓,可想而知,會有多少新穎別緻的軟件會誕生。但也有其兩面性,血腥、暴力、**方面的程序和遊戲如何控制正是留給Android難題之一。
5)、無縫結合的Google應用
現在叱吒互聯網的Google已經走過10年度歷史。從搜索巨人到全面的互聯網滲透,Google服務如地圖、郵件、搜索等已經成爲鏈接用戶和互聯網的重要紐帶,而Android平臺手機將無縫結合這些優秀的Google服務。
Android研發歷史
2005年
Google收購了成立僅22個月的高科技企業Android公司。
2007年
11月5日,谷歌公司正式向外界展現了這款名爲Android的操做系統,而且在這天谷歌宣佈創建一個全球性的聯盟組織,該組織由34家手機制造商、軟件開發商、電信運營商以及芯片製造商共同組成。這一聯盟將支持谷歌發佈的手機操做系統以及應用軟件,將共同開發Android系統的開放源代碼。
2008年
5月28日,Patrick Brady於Google I/O大會上提出Android HAL架構圖。
8月18日,Android得到美國聯邦通訊委員會的批准。
9月22日,谷歌正式對外發布第一款Android手機——HTC G1。
9月23日,谷歌發佈Android1.0。
9月24日,全球業界都表示不看好Android操做系統,而且聲稱最多1年,Android就會被Google關閉。
2009年
4月30日,Android1.5正式發佈。
5月10日,HTC G1和HTC G2市場大賣,成爲僅次於iPhone的熱門機型。
9月25日,Android1.6正式發佈。
9月29日,HTC Hero G3廣受歡迎,成爲全球最受歡迎的機型。
10月28日,Android 2.0 智能手機操做系統正式發佈。
11月10日,因爲Android的火熱,Android平臺出現第一個惡意間諜軟件:Mobile Spy。
2010年
1月7日,Google發佈了旗下第一款自主品牌手機:Nexus one(HTC G5)。
1月,谷歌與Linux基金會就Linux內核的同步和維護意見不一致而產生了矛盾。
2月3日,Linux內核開發者Greg Kroah-Hartman將Android的驅動程序從Linux內核「狀態樹」上除去。
5月19日,Google正式對外發布Android2.2智能操做系統。
5月20日,Google對外正式展現了搭載Android系統的智能電視-Google TV,該電視爲全球首臺智能電視。
7月1日,Google宣佈正式與雅虎、亞馬遜合做,而且在Android上推出多項Kindle服務和雅虎服務。
7月9日,美國NDP集團調查顯示,Android系統已佔據了美國手機市場28%的份額,全球17%的市場份額。
8月12日,Android平臺出現第一個木馬病毒:Trojan-SMS.AndroidOS.FakePlayer.a。
9月,Android應用數量超過9萬個。
9月21日,Google對外公佈數據,每日銷售的Android設備的新用戶數達到20萬。
10月26日,Google宣佈Android達到第一個里程碑:電子市場上Android應用數量達到10萬個。
12月7日,Google正式發佈Android2.3操做系統。
2011年
1月,Google對外宣佈Android Market上的應用數量超過20萬。
1月,Google對外公佈數據,每日Android設備的新用戶數達到了30萬。
2月,美國移動用戶36%擁有智能手機。當中,48%的智能手機用戶選擇Android智能手機。約32.1%的智能手機用戶選擇了蘋果iPhone。黑莓及其它智能手機佔有11.6%的份額。
2月2日,Android3.0正式發佈。
2月3日,谷歌發佈了專用於平板電腦的Android 3.0蜂巢系統。
6月,Android在日本的智能手機操做系統市場佔有率達到57%。
7月,Android在歐洲的智能手機操做系統市場佔有率達到了22.3%
7月,Google對外公佈數據,Android天天的新用戶達到55萬,Android設備用戶總數達1.35億。
8月,谷歌收購摩托羅拉移動。
8月,Google對外宣佈Android Market上的應用數量超過30萬。
8月2日,Android手機已佔據全球智能機市場48%的份額,並在亞太地區市場佔據統治地位,終結了Symbian(塞班系統)的霸主地位,躍居全球第一。
8月,Android在韓國的智能手機操做系統市場佔有率達到了95%。
8月,Android系統在35個國家市場佔有率第一,平均市場佔有率達到48%。
8月,Android系統成爲亞太地區第一大系統,市場佔有率爲亞太地區第一大。
9月,Android在美國的智能手機操做系統市場佔有率達到43%。
10月19日,谷歌正式發佈Android 4.0操做系統。
11月,Android Market上提交審覈的應用程序數量達到50萬。
11月初,谷歌對Android Market上的應用程序進行了大清理,據統計,這次共清理了約18萬個應用程序,包括流氓應用、病毒軟件、侵犯版權、低質量和濫竽充數的各類程序,谷歌將這一系列應用刪除後,使得Android市場中的優質應用程序總數到31.5萬。
11月15日,Android在中國大陸的智能手機操做系統市場佔有率達到了58%。
11月20日,谷歌宣佈啓動了Android Market應用審覈、取締、清掃行爲,按期對電子市場上存在的不合格、低質量、違法惡意的應用程序進行清理。
11月18日,美國NPD數據顯示,Android和iOS平臺上的遊戲佔有率都首度超過任天堂的DS掌機和索尼的PSP掌機,手機遊戲玩家也超過了掌機玩家,遊戲開發商更傾向於向Android和iOS手機上開發遊戲。
11月18日,谷歌報告顯示,經過谷歌服務器激活的Android設備用戶總數已經超過2億,天天激活的新用戶數超過55萬,而這僅僅是經過谷歌服務器激活的用戶設備數。
12月9日,Google對外宣佈,Android Market的累計下載量已經突破100億次,平均每個月的下載量爲10億次。
12月18日,Google移動事業部副總裁Andy Rubin表示,天天激活的Android設備已達到70萬部。
12月26日,Andy Rubin經過Twitter宣佈,聖誕節的前兩天24日和25日,共有370萬部Android設備被激活。
2012年
1月4日,數據顯示,Android Market上的應用程序數量突破40萬個,每4個月增長10萬個應用程序
1月5,數據顯示,在谷歌電子市場上登記的Android開發者已經達到了10萬名。
1月20日,谷歌報告顯示,經過谷歌服務器激活的Android設備用戶總數已經超過2.5億,距離去年11月的數量,在短短2個月時間內全球共賣出5000萬臺安卓設備,平均每秒鐘就賣出10檯安卓設備。
2月4日,comScore等數據市場研究機構的數據顯示,安卓在美國手機市場的佔有率達到了47.3%。
2月5日,美國聯邦政府宣佈成立專門的Android實驗室進行適用於軍方的Android第三方ROM的定製工做。
2月15日,美國聯邦政府總務署宣佈已經採購了2萬臺Android手機供政府人員使用。
2月22日,Android在中國大陸的智能手機操做系統市場佔有率達到了68.4%。
2月28日,谷歌正式宣佈,Android設備天天激活量達到85萬臺,經過谷歌服務器激活的Android設備用戶總數突破3億臺,距離2012年1月的數量,在短短1個月時間內全球共賣出5000萬檯安卓設備,平均每秒鐘就賣出15檯安卓設備。
2月28日,谷歌官方數據顯示,Android電子市場(Android Market)上的應用程序數量已經突破45萬個,一年內增長30萬個。
3月1日,Google對外宣佈,Android Market的累計下載量已經突破130億次。
3月4日,Android在印度的智能手機操做系統市場佔有率達到了34%。
4月4日,Android在美國市場的佔有率增加到了50.1%。
5月1日,Android在東南亞各國的平均份額達到了49%。
.................
Android系統架構
Android的系統架構和其它操做系統同樣,採用了分層的架構。android分爲四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
Android是以Linux爲核心的手機操做平臺,做爲一款開放式的操做系統,隨着Android的快速發展,現在已容許開發者使用多種編程語言來開發Android應用程序,而再也不是之前只能使用Java開發Android應用程序的單一局面,於是受到衆多開發者的歡迎,成爲真正意義上的開放式操做系統。
在Android中,開發者可使用Java做爲編程語言來開發應用程序,也能夠經過NDK使用C/C++做爲編程語言來開發應用程序,也可以使用SL4A來使用其餘各類腳本語言進行編程(如:python、lua、tcl、php等等),還有其餘諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持Android編程,甚至經過MonoDroid,開發者還可使用C#做爲編程語言來開發應用程序。另外,谷歌還在2009年特別發佈了針對初學者的Android Simple語言,該語言相似Basic語言。而在網頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經支持Android開發。
而在Android系統底層方面,Android使用C/C++做爲開發語言。
應用程序(部分)
早期的Android應用程序開發,一般經過Android SDK(Android軟件開發包)下使用Java做爲編程語言來開發應用程序,但經過不一樣的軟件開發包,則使用的編程語言也不一樣。
例如開發者能夠經過Android NDK(Android Native開發包)使用C語言或者C++語言來做爲編程語言開發應用程序。同時谷歌還推出了適合初學者編程使用的Simple語言,該語言相似微軟公司的Visual Basic語言。此外,谷歌公司還推出了Google App Inventor開發工具,該開發工具能夠快速地構建應用程序,方便新手開發者。
Java開發方面
Android支持使用Java做爲編程語言來開發應用程序,而Android的Java開發方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機的效率和資源佔用,谷歌從新設計了Android的Java,以便能提升效率和減小資源佔用,於是與J2ME等不一樣。 Android結構其中Activity等同於J2ME的MIDlet,一個 Activity 類(Class)負責建立視窗(Windows),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫作Service。二者之間經過由ServiceConnection和AIDL連結,達到複數程序同時運行效果。若是運行中的 Activity 所有畫面被其餘 Activity 取代時,該 Activity 便被中止(Stopped),甚至被系統清除(Kill)。
View等同於J2ME的Displayable,程序人員能夠經過 View 類與「XML layout」檔將UI放置在視窗上,Android 1.5的版本能夠利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,因此可使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各類layout 的基礎抽象類(abstract class),ViewGroup以內還能夠有ViewGroup。View的構造函數不須要再Activity中調用,可是Displayable的是必須的,在Activity 中,要經過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,二者之間經過Listener 結合在一塊兒,每個View均可以註冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架註冊View.OnClickListener。另外還有BitMap等同於J2ME的Image。
C/C++開發方面
早期的Android開發只支持Java做爲編程語言開發應用程序,於是使得其餘語言開發者只能望而卻步。2010年4月,谷歌正式對開發者發佈了Android NDK,NDK容許開發者使用C/C++做爲編程語言來爲Android開發應用程序,第一版的NDK使得開發者看到了C/C++在Android開發中的但願。
可是,當前版本的NDK在功能上還有不少侷限性:NDK並無提供對應用程序生命週期的維護;NDK也不提供對Android系統中大量系統事件的支持;對於做爲應用程序交互接口的UI API,當前版本的NDK中也沒有提供。可是相對於第一版的NDK,如今的NDK已經進行了許多重大的功能改進。
因而可知,NDK仍然須要完善和發展,相信將來隨着NDK的發展,NDK能夠作得更多更好。
中介軟件
操做系統與應用程序的溝通橋樑,應用分爲兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)爲Google自制的Bionic Libc。
Android採用OpenCORE做爲基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android 使用skia 爲核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能至關,但相較於Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,目前Skia 也是Google Chrome 的圖形引擎。
Android的多媒體數據庫採用SQLite數據庫系統。數據庫又分爲共用數據庫及私用數據庫。用戶可經過ContentResolver類(Column)取得共用數據庫。
Android的中間層多以Java 實現,而且採用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種「暫存器型態」(Register Based)的Java虛擬機,變量皆存放於暫存器中,虛擬機的指令相對減小。
Dalvik虛擬機能夠有多個實例(instance), 每一個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機並不是運行Java字節碼(Bytecode),而是運行一種稱爲.dex格式的文件。
硬件抽像層
Android 的 HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅動模塊。HAL 的目的是爲了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過分依賴 Linux kernel,以達成 kernel independent 的概念,也讓 Android framework 的開發能在不考量驅動程序實現的前提下進行發展。
HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub 向 HAL「提供」操做函數(operations),並由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 這些操做函數。HAL 裏包含了許多的 stub(代理人)。Runtime 只要說明「類型」,即 module ID,就能夠取得操做函數。
系統內核
Android 是運行於 Linux kernel之上,但並非GNU/Linux。由於在通常GNU/Linux 裏支持的功能,Android 大都沒有支持,包括Cairo、X十一、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 爲了達到商業應用,必須移除被GNU GPL受權證所約束的部份,例如Android將驅動程序移到 userspace,使得Linux driver 與 Linux kernel完全分開。bionic/libc/kernel/ 並不是標準的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所產生的,這樣作是爲了保留常數、數據結構與宏。
目前Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網絡堆棧(Network Stack),驅動程序模型(Driver Model)等。下載Android源碼以前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工做的一個工具。
安全權限機制
Android自己是一個權限分立的操做系統。在這類操做系統中,每一個應用都以惟一的一個系統識別身份運行(Linux用戶ID與羣組ID)。系統的各部分也分別使用各自獨立的識別方式。Linux就是這樣將應用與應用,應用與系統隔離開。
系統更多的安全功能經過權限機制提供。權限能夠限制某個特定進程的特定操做,也能夠限制每一個URI權限對特定數據段的訪問。
Android安全架構的核心設計思想是,在默認設置下,全部應用都沒有權限對其餘應用、系統或用戶進行較大影響的操做。這其中包括讀寫用戶隱私數據(聯繫人或電子郵件),讀寫其餘應用文件,訪問網絡或阻止設備待機等。
安裝應用時,在檢查程序簽名說起的權限,且通過用戶確認後,軟件包安裝器會給予應用權限。從用戶角度看,一款Android應用一般會要求以下的權限:
撥打電話、發送短信或彩信、修改/刪除SD卡上的內容、讀取聯繫人的信息、讀取日程信的息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網絡獲取)地理位置、建立藍牙鏈接、對互聯網的徹底訪問、查看網絡狀態,查看WiFi狀態、避免手機待機、修改系統全局設置、讀取同步設定、開機自啓動、重啓其餘應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。
一款應用應該根據自身提供的功能,要求合理的權限。用戶也能夠分析一款應用所需權限,從而簡單斷定這款應用是否安全。如一款應用是不帶廣告的單機版,也沒有任何附加的內容須要下載,那麼它要求訪問網絡的權限就比較可疑。