Android
安卓系統(tǒng)一般指Android
Google公司開發(fā)的操作系統(tǒng)
共2個含義
Android是由Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)并開發(fā)的一種基于Linux的自由且開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備。 其最初由Andy Rubin開發(fā),后被Google于2005年8月收購。之后Google與84家硬件制造商、軟件開發(fā)商及電信營運商組建開放手機聯(lián)盟,共同研發(fā)改良Android系統(tǒng),完成開發(fā)后,Google以Apache開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。[1]
中文名稱
安卓
外文名稱
Android
開發(fā)公司
開發(fā)團隊
Google、開放手持設(shè)備聯(lián)盟
上線時間
2008年9月23日
編程語言
C/C++(底層) Java等(應(yīng)用層)
源碼模式
自由及開放源代碼軟件
軟件許可
Apache License、 GPL等
系統(tǒng)家族
類Unix,Linux
內(nèi)核類型
宏內(nèi)核(Linux內(nèi)核)
制作人
安迪·魯賓(Andy Rubin)
發(fā)行階段
正式版
系統(tǒng)簡介
30張
Android logo相關(guān)圖片
Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。
Android一詞最早出現(xiàn)于法國作家利爾亞當(dāng)(Auguste Villiers de l'Isle-Adam)在1886年發(fā)表的科幻小說《未來夏娃》(L'ève future)中。他將外表像人的機器起名為Android。
Android的Logo是由Ascender公司設(shè)計的,誕生于2010年,其設(shè)計靈感源于男女廁所門上的圖形符號,[1]于是布洛克繪制了一個簡單的機器人,它的軀干就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。其中的文字使用了Ascender公司專門制作的稱之為“Droid ” 的字體。Android是一個全身綠色的機器人,綠色也是Android的標(biāo)志。顏色采用了PMS 376C和RGB中十六進(jìn)制的#A4C639來繪制,這是Android操作系統(tǒng)的品牌象徵。有時候,它們還會使用純文字的Logo。[1]
2012年7月美國科技博客網(wǎng)站BusinessInsider評選出二十一世紀(jì)十款最重要電子產(chǎn)品,Android操作系統(tǒng)和iPhone等榜上有名。
(Android logo 相關(guān)圖片相冊圖片來源:[2])
發(fā)展歷程
2003年10月,Andy Rubin等人創(chuàng)建Android公司,并組建Android團隊。
2005年8月17日,Google低調(diào)收購了成立僅22個月的高科技企業(yè)Android及其團隊。安迪魯賓成為Google公司工程部副總裁,繼續(xù)負(fù)責(zé)Android項目。
2007年11月5日,谷歌公司正式向外界展示了這款名為Android的操作系統(tǒng),并且在這天谷歌宣布建立一個全球性的聯(lián)盟組織,該組織由34家手機制造商、軟件開發(fā)商、電信運營商以及芯片制造商共同組成,并與84家硬件制造商、軟件開發(fā)商及電信營運商組成開放手持設(shè)備聯(lián)盟(Open Handset Alliance)來共同研發(fā)改良Android系統(tǒng),這一聯(lián)盟將支持谷歌發(fā)布的手機操作系統(tǒng)以及應(yīng)用軟件,Google以Apache免費開源許可證的授權(quán)方式,發(fā)布了Android的源代碼。[3][4]
2008年,在GoogleI/O大會上,谷歌提出了AndroidHAL架構(gòu)圖,在同年8月18號,Android獲得了美國聯(lián)邦通信委員會(FCC)的批準(zhǔn),在2008年9月,谷歌正式發(fā)布了Android 1.0系統(tǒng),這也是Android系統(tǒng)最早的版本。
2009年4月,谷歌正式推出了Android 1.5這款手機,從Android 1.5版本開始,谷歌開始將Android的版本以甜品的名字命名,Android 1.5命名為Cupcake(紙杯蛋糕)。該系統(tǒng)與Android 1.0相比有了很大的改進(jìn)。
2009年9月份,谷歌發(fā)布了Android 1.6的正式版,并且推出了搭載Android 1.6正式版的手機HTC Hero(G3),憑借著出色的外觀設(shè)計以及全新的Android 1.6操作系統(tǒng),HTC Hero(G3)成為當(dāng)時全球最受歡迎的手機。Android 1.6也有一個有趣的甜品名稱,它被稱為Donut(甜甜圈)。
安卓各個版本在市場受歡迎度
2010年2月份,Linux內(nèi)核開發(fā)者Greg Kroah-Hartman將Android的驅(qū)動程序從Linux內(nèi)核“狀態(tài)樹”(“staging tree”)上除去,從此,Android與Linux開發(fā)主流將分道揚鑣。在同年5月份,谷歌正式發(fā)布了Android 2.2操作系統(tǒng)。谷歌將Android 2.2操作系統(tǒng)命名為Froyo,翻譯完名為凍酸奶。
2010年10月份,谷歌宣布Android系統(tǒng)達(dá)到了第一個里程碑,即電子市場上獲得官方數(shù)字認(rèn)證的Android應(yīng)用數(shù)量已經(jīng)達(dá)到了10萬個,Android系統(tǒng)的應(yīng)用增長非常迅速。在2010年12月,谷歌正式發(fā)布了Android 2.3操作系統(tǒng)Gingerbread(姜餅)。
2011年1月,谷歌稱每日的Android設(shè)備新用戶數(shù)量達(dá)到了30萬部,到2011年7月,這個數(shù)字增長到55萬部,而Android系統(tǒng)設(shè)備的用戶總數(shù)達(dá)到了1.35億,Android系統(tǒng)已經(jīng)成為智能手機領(lǐng)域占有量最高的系統(tǒng)。
2011年8月2日,Android手機已占據(jù)全球智能機市場48%的份額,并在亞太地區(qū)市場占據(jù)統(tǒng)治地位,終結(jié)了Symbian(塞班系統(tǒng))的霸主地位,躍居全球第一。
2011年9月份,Android系統(tǒng)的應(yīng)用數(shù)目已經(jīng)達(dá)到了48萬,而在智能手機市場,Android系統(tǒng)的占有率已經(jīng)達(dá)到了43%。繼續(xù)在排在移動操作系統(tǒng)首位。谷歌將會發(fā)布全新的Android 4.0操作系統(tǒng),這款系統(tǒng)被谷歌命名為Ice Cream Sandwich(冰激凌三明治)。
2012年1月6日,谷歌Android Market已有10萬開發(fā)者推出超過40萬活躍的應(yīng)用,大多數(shù)的應(yīng)用程序為免費。Android Market應(yīng)用程序商店目錄在新年首周周末突破40萬基準(zhǔn),距離突破30萬應(yīng)用僅4個月。在2011年早些時候,Android Market從20萬增加到30萬應(yīng)用也花了四個月。[5]
2013年11月1日,Android4.4正式發(fā)布,從具體功能上講,Android4.4提供了各種實用小功能,新的Android系統(tǒng)更智能,添加更多的Emoji表情圖案,UI的改進(jìn)也更現(xiàn)代,如全新的HelloiOS7半透明效果。
2015年27日,網(wǎng)絡(luò)安全公司Zimperium研究人員警告,安卓(Android)存在“致命”安全漏洞,黑客發(fā)送一封彩信便能在用戶毫不知情的情況下完全控制手機。[6]
2018年10月,谷歌表示,將于2018年12月6日停止Android系統(tǒng)中的Nearby Notifications(附近通知)服務(wù),因為Android用戶收到太多的附件商家推銷信息的垃圾郵件。[7]
2019年8月,谷歌宣布Android系統(tǒng)的重大改變,不僅換了全新的logo,命名方式也變了,今年的Android Q的正式名稱是Android 10。
發(fā)行版本
測試版本
Android 各代版本 Logo
Android在正式發(fā)行之前,最開始擁有兩個內(nèi)部測試版本,并且以著名的機器人名稱來對其進(jìn)行命名,它們分別是:阿童木(AndroidBeta),發(fā)條機器人(Android 1.0)。后來由于涉及到版權(quán)問題,谷歌將其命名規(guī)則變更為用甜點作為它們系統(tǒng)版本的代號的命名方法。甜點命名法開始于Android 1.5發(fā)布的時候。作為每個版本代表的甜點的尺寸越變越大,然后按照26個字母數(shù)序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松餅(Android 2.0/2.1),凍酸奶(Android 2.2),姜餅(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛軋?zhí)牵∟ougat,Android 7.0),奧利奧(Oreo,Android 8.0),派(Pie,Android 9.0)[8][9][10]
1.1
2008年9月發(fā)布的Android第一版。
1.5
Cupcake(紙杯蛋糕):2009年4月30日發(fā)布。
主要的更新如下:
拍攝/播放影片,并支持上傳到Y(jié)outube;支持立體聲藍(lán)牙耳機,同時改善自動配對性能;最新的采用WebKit技術(shù)的瀏覽器,支持復(fù)制/貼上和頁面中搜索;GPS性能大大提高;提供屏幕虛擬鍵盤;主屏幕增加音樂播放器和相框widgets;應(yīng)用程序自動隨著手機旋轉(zhuǎn);短信、Gmail、日歷,瀏覽器的用戶接口大幅改進(jìn),如Gmail可以批量刪除郵件;相機啟動速度加快,拍攝圖片可以直接上傳到Picasa;來電照片顯示。
1.6
Donut(甜甜圈):2009年9月15日發(fā)布。
主要的更新如下:
重新設(shè)計的Android Market手勢;支持CDMA網(wǎng)絡(luò);文字轉(zhuǎn)語音系統(tǒng)(Text-to-Speech);快速搜索框;全新的拍照接口;查看應(yīng)用程序耗電;支持虛擬私人網(wǎng)絡(luò)(VPN);支持更多的屏幕分辨率;支持OpenCore2媒體引擎;新增面向視覺或聽覺困難人群的易用性插件。
2.0
2009年10月26日發(fā)布。
主要的更新如下:
優(yōu)化硬件速度;"Car Home"程序;支持更多的屏幕分辨率;改良的用戶界面;新的瀏覽器的用戶接口和支持HTML5;新的聯(lián)系人名單;更好的白色/黑色背景比率;改進(jìn)Google Maps3.1.2;支持Microsoft Exchange;支持內(nèi)置相機閃光燈;支持?jǐn)?shù)碼變焦;改進(jìn)的虛擬鍵盤;支持藍(lán)牙2.1;支持動態(tài)桌面的設(shè)計。
Android 2.2/2.2.1 Froyo(凍酸奶) :2010年5月20日發(fā)布。主要的更新如下:
整體性能大幅度的提升;3G網(wǎng)絡(luò)共享功能;Flash的支持;App2sd功能;全新的軟件商店;更多的Web應(yīng)用API接口的開發(fā)。
2.3.x
Gingerbread(姜餅) :2010年12月7日發(fā)布。
主要的更新如下:
增加了新的垃圾回收和優(yōu)化處理事件;原生代碼可直接存取輸入和感應(yīng)器事件、EGL/OpenGLES、OpenSL ES;新的管理窗口和生命周期的框架;支持VP8和WebM視頻格式,提供AAC和AMR寬頻編碼,提供了新的音頻效果器;支持前置攝像頭、SIP/VOIP和NFC(近場通訊);簡化界面、速度提升;更快更直觀的文字輸入;一鍵文字選擇和復(fù)制/粘帖;改進(jìn)的電源管理系統(tǒng);新的應(yīng)用管理方式。
3.0
Honeycomb(蜂巢):2011年2月2日發(fā)布。
主要更新如下:
優(yōu)化針對平板 ;全新設(shè)計的UI增強網(wǎng)頁瀏覽功能 ;in-app purchases功能。
3.1
Honeycomb(蜂巢) :2011年5月11日布發(fā)布。
版本主要更新如下:
經(jīng)過優(yōu)化的Gmail電子郵箱 ;全面支持Google Maps ;將Android手機系統(tǒng)跟平板系統(tǒng)再次合并從而方便開發(fā)者;任務(wù)管理器可滾動,支持USB輸入設(shè)備(鍵盤、鼠標(biāo)等) ;支持Google TV.可以支持XBOX 360無線手柄;widget支持的變化,能更加容易的定制屏幕widget插件。
3.2
Honeycomb(蜂巢):2011年7月13日發(fā)布。
版本更新如下:
支持7英寸設(shè)備;引入了應(yīng)用顯示縮放功能。
4.0
Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港發(fā)布。
安卓2.0版本
版本主要更新如下:
全新的UI;全新的Chrome Lite瀏覽器,有離線閱讀,16標(biāo)簽頁,隱身瀏覽模式等;截圖功能;更強大的圖片編輯功能;自帶照片應(yīng)用堪比Instagram,可以加濾鏡、加相框,進(jìn)行360度全景拍攝,照片還能根據(jù)地點來排序;Gmail加入手勢、離線搜索功能,UI更強大;新功能People:以聯(lián)系人照片為核心,界面偏重滑動而非點擊,集成了Twitter、Linkedin、Google+等通訊工具。有望支持用戶自定義添加第三方服務(wù);新增流量管理工具,可具體查看每個應(yīng)用產(chǎn)生的流量,限制使用流量,到達(dá)設(shè)置標(biāo)準(zhǔn)后自動斷開網(wǎng)絡(luò)。
4.1
Android 4.1Jelly Bean(果凍豆):2012年6月28日
新特性:
更快、更流暢、更靈敏;特效動畫的幀速提高至60fps,增加了三倍緩沖;增強通知欄;全新搜索;搜索將會帶來全新的UI、智能語音搜索和Google Now三項新功能;桌面插件自動調(diào)整大??;加強無障礙操作;語言和輸入法擴展;新的輸入類型和功能;新的連接類型。
4.2
Android 4.2 Jelly Bean 原生系統(tǒng)用戶界面
Android 4.2Jelly Bean(果凍豆):2012年10月30日
Android 4.2沿用“果凍豆”這一名稱,以反映這種最新操作系統(tǒng)與Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具體如下:
Photo Sphere全景拍照功能;鍵盤手勢輸入功能;改進(jìn)鎖屏功能,包括鎖屏狀態(tài)下支持桌面掛件和直接打開照相功能等;可擴展通知,允許用戶直接打開應(yīng)用;Gmail郵件可縮放顯示;Daydream屏幕保護程序;用戶連點三次可放大整個顯示屏,還可用兩根手指進(jìn)行旋轉(zhuǎn)和縮放顯示,以及專為盲人用戶設(shè)計的語音輸出和手勢模式導(dǎo)航功能等;支持Miracast無線顯示共享功能;Google Now現(xiàn)可允許用戶使用Gamail作為新的數(shù)據(jù)來源,如改進(jìn)后的航班追蹤功能、酒店和餐廳預(yù)訂功能以及音樂和電影推薦功能等。
4.4
Android 4.4KitKat(奇巧巧克力): 2013年下半年
2013年9月4日凌晨,谷歌對外公布了Android新版本Android 4.4KitKat(奇巧巧克力),并且于2013年11月01日正式發(fā)布,新的4.4系統(tǒng)更加整合了自家服務(wù),力求防止安卓系統(tǒng)繼續(xù)碎片化、分散化。[11]
5.0
Android 5.0Lollipop(棒棒糖):美國太平洋時間2014年10月15日
Android 5.0 系統(tǒng)使用一種新的MaterialDesign設(shè)計風(fēng)格。從圖片上就能看到一些全新的設(shè)計。從圖片上看,這套設(shè)計圖對 Android 系統(tǒng)的桌面圖標(biāo)及部件的透明度進(jìn)行的稍稍的調(diào)整,并且各種桌面小部件也可以重疊擺放。雖然調(diào)整桌面部件透明度對 Android 系統(tǒng)來說并不算什么新鮮的功能,但是加入了透明度的改進(jìn)。界面加入了五彩繽紛的顏色、流暢的動畫效果,呈現(xiàn)出一種清新的風(fēng)格。采用這種設(shè)計的目的在于統(tǒng)一 Android 設(shè)備的外觀和使用體驗,不論是手機、平板還是多媒體播放器。
6.0
Android 6.0Marshmallow(棉花糖):2015年9月30日
新系統(tǒng)的整體設(shè)計風(fēng)格依然保持扁平化的MeterialDesign風(fēng)格。Android6.0在對軟件體驗與運行性能上進(jìn)行了大幅度的優(yōu)化。據(jù)測試,Android6.0可使設(shè)備續(xù)航時間提升30%。
7.0
Android 7.0Nougat(牛軋?zhí)牵?016年8月22日[10][12]
8.0
Android 8.0Oreo(奧利奧):2017 年 8 月 22 日
9.0
Android 9.0Pie (派):2018 年 5月 9日
通知欄樣式更改,整體設(shè)計添加了更多圓形。
10.0
Android 10.0 Q (未知)
通知欄電量數(shù)字調(diào)整到下方。
通知欄的通知信息長按會顯示“阻止”、“靜默顯示”和“保持通知”三個選項。
新增原生錄屏功能、桌面模式等。
系統(tǒng)架構(gòu)
Android結(jié)構(gòu)
Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,Android分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和Linux內(nèi)核層。
應(yīng)用程序
Android會同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。
應(yīng)用程序框架
開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計簡化了組件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性)。同樣,該應(yīng)用程序重用機制也使用戶可以方便的替換程序組件。
隱藏在每個應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;
豐富而又可擴展的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(Lists),網(wǎng)格(Grids),文本框(Text boxes),按鈕(Buttons), 甚至可嵌入的web瀏覽器。
內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫), 或者共享它們自己的數(shù)據(jù)
資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件(Layout files )。
通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。
活動管理器( Activity Manager) 用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。
系統(tǒng)運行庫
Android 包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫:
* 系統(tǒng) C 庫 - 一個從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫Libc ), 它是專門為基于Embedded linux的設(shè)備定制的。
* 媒體庫 - 基于PacketVideoOpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
* Surface Manager - 對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提 供了2D和3D圖層的無縫融合。
* LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。
系統(tǒng)結(jié)構(gòu)
系統(tǒng)內(nèi)核
安卓系統(tǒng)內(nèi)核
Android 是運行于Linux kernel之上,但并不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU GPL授權(quán)證所約束的部份,例如Android將驅(qū)動程序移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。Bionic/Libc/Kernel/ 并非標(biāo)準(zhǔn)的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。
Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網(wǎng)絡(luò)堆棧(Network Stack),驅(qū)動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構(gòu)建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
后綴簡介
[13]APK是安卓應(yīng)用的后綴,是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執(zhí)行即可安裝。apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執(zhí)行程序,并非Java ME的字節(jié)碼而是Dalvik字節(jié)碼。
[13]APK文件結(jié)構(gòu)
一個APK文件結(jié)構(gòu)為:
1. META-INF\ (注:Ja**件中常可以看到);
2. res\ (注:存放資源文件的目錄) ;
3. AndroidManifest.xml (注:程序全局配置文件) ;
4. classes.dex (注:Dalvik字節(jié)碼);
5. resources.arsc (注:編譯后的二進(jìn)制資源文件)。
總結(jié)下我們發(fā)現(xiàn)Android在運行一個程序時首先需要UnZip,然后類似Symbian那樣直接執(zhí)行安裝,和Windows Mobile中的PE文件有區(qū)別,這樣做對于程序的保密性和可靠性不是很高,通過dexdump命令可以反編譯,但這樣做符合發(fā)展規(guī)律,微軟的 Windows Gadgets或者說WPF也采用了這種構(gòu)架方式。
在Android平臺中dalvik vm的執(zhí)行文件被打包為apk格式,最終運行時加載器會解壓然后獲取編譯后androidmanifest.xml文件中的permission分支相關(guān)的安全訪問,但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下會發(fā)現(xiàn)執(zhí)行是不受限制的。
最終我們平時安裝的文件可能不是這個文件夾,而在android rom中系統(tǒng)的apk文件默認(rèn)會放入這個文件夾,它們擁有著root權(quán)限。
硬件抽像層
Android 的HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動模塊。HAL 的目的是為了把 Androidframework與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達(dá)成 Kernelindependent的概念,也讓 Android framework 的開發(fā)能在不考量驅(qū)動程序?qū)崿F(xiàn)的前提下進(jìn)行發(fā)展。
HAL stub 是一種代理人(Proxy)的概念,Stub 是以 *.so 檔的形式存在。Stub 向 HAL“提供”操作函數(shù)(Operations),并由 Android runtime 向 HAL 取得 Stub 的Operations,再 Callback 這些操作函數(shù)。HAL 里包含了許多的 Stub(代理人)。Runtime 只要說明“類型”,即 Module ID,就可以取得操作函數(shù)。
中介軟件
操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背后的引擎。Surface flinger 是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的Bionic Libc。
Android采用OpenCORE作為基礎(chǔ)多媒體框架。Open CORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當(dāng),但相較于Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,Skia 也是Google Chrome 的圖形引擎。
Android的多媒體數(shù)據(jù)庫采用SQLite數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫又分為共用數(shù)據(jù)庫及私用數(shù)據(jù)庫。用戶可通過ContentResolver類(Column)取得共用數(shù)據(jù)庫。
Android的中間層多以Java 實現(xiàn),并且采用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種“暫存器型態(tài)”(Register Based)的Java虛擬機,變量皆存放于暫存器中,虛擬機的指令相對減少。
Dalvik虛擬機可以有多個實例(Instance), 每個Android應(yīng)用程序都用一個自屬的Dalvik虛擬機來運行,讓系統(tǒng)在運行程序時可達(dá)到優(yōu)化。Dalvik 虛擬機并非運行Java字節(jié)碼(Bytecode),而是運行一種稱為.dex格式的文件。
安全權(quán)限機制
Android本身是一個權(quán)限分立的操作系統(tǒng)。在這類操作系統(tǒng)中,每個應(yīng)用都以唯一的一個系統(tǒng)識別身份運行(Linux用戶ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨立的識別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開。
系統(tǒng)更多的安全功能通過權(quán)限機制提供。權(quán)限可以限制某個特定進(jìn)程的特定操作,也可以限制每個URI權(quán)限對特定數(shù)據(jù)段的訪問。
Android安全架構(gòu)的核心設(shè)計思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒有權(quán)限對其他應(yīng)用、系統(tǒng)或用戶進(jìn)行較大影響的操作。這其中包括讀寫用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫其他應(yīng)用文件,訪問網(wǎng)絡(luò)或阻止設(shè)備待機等。
安裝應(yīng)用時,在檢查程序簽名提及的權(quán)限,且經(jīng)過用戶確認(rèn)后,軟件包安裝器會給予應(yīng)用權(quán)限。從用戶角度看,一款A(yù)ndroid應(yīng)用通常會要求如下的權(quán)限:
撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫入日程數(shù)據(jù)、讀取電話狀態(tài)或識別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢谩?chuàng)建藍(lán)牙連接、對互聯(lián)網(wǎng)的完全訪問、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機待機、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開機自啟動、重啟其他應(yīng)用、終止運行中的應(yīng)用、設(shè)定偏好應(yīng)用、震動控制、拍攝圖片等。
一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶也可以分析一款應(yīng)用所需權(quán)限,從而簡單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機版,也沒有任何附加的內(nèi)容需要下載,那么它要求訪問網(wǎng)絡(luò)的權(quán)限就比較可疑。
應(yīng)用組件
Android開發(fā)四大組件分別是:活動(Activity): 用于表現(xiàn)功能。服務(wù)(Service): 后臺運行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播。內(nèi)容提供商(Content Provider): 支持在多個應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫。
活動
Android 中,Activity是所有程序的根本,所有程序的流程都運行在Activity 之中,Activity可以算是開發(fā)者遇到的最頻繁,也是Android 當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity 一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那么Activity就相當(dāng)于一個網(wǎng)頁。在Activity 當(dāng)中可以添加一些Button、Check box 等控件??梢钥吹紸ctivity 概念和網(wǎng)頁的概念相當(dāng)類似。
20張
Android的應(yīng)用
一般一個Android 應(yīng)用是由多個Activity 組成的。這多個Activity 之間可以進(jìn)行相互跳轉(zhuǎn),例如,按下一個Button按鈕后,可能會跳轉(zhuǎn)到其他的Activity。和網(wǎng)頁跳轉(zhuǎn)稍微有些不一樣的是,Activity 之間的跳轉(zhuǎn)有可能返回值,例如,從Activity A 跳轉(zhuǎn)到Activity B,那么當(dāng)Activity B 運行結(jié)束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當(dāng)方便的。
當(dāng)打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態(tài),并且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。可以選擇性的移除一些沒有必要保留的屏幕,因為Android會把每個應(yīng)用的開始到當(dāng)前的每個屏幕保存在堆棧中。
(Android的應(yīng)用圖冊圖片來源:[14])
服務(wù)
安卓不同版本圖片
Service 是android 系統(tǒng)中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能后臺運行,并且可以和其他組件進(jìn)行交互。Service 是沒有界面的長生命周期的代碼。Service是一種程序,它可以運行很長時間,但是它卻沒有用戶界面。這么說有點枯燥,來看個例子。打開一個音樂播放器的程序,這個時候若想上網(wǎng)了,那么,打開Android瀏覽器,這個時候雖然已經(jīng)進(jìn)入了瀏覽器這個程序,但是,歌曲播放并沒有停止,而是在后臺繼續(xù)一首接著一首的播放。其實這個播放就是由播放音樂的Service進(jìn)行控制。當(dāng)然這個播放音樂的Service也可以停止,例如,當(dāng)播放列表里邊的歌曲都結(jié)束,或者用戶按下了停止音樂播放的快捷鍵等。Service 可以在和多場合的應(yīng)用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在后臺繼續(xù)播放,比如檢測SD 卡上文件的變化,再或者在后臺記錄地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后頭的。
開啟Service有兩種方式:
(1) Context.startService():Service會經(jīng)歷onCreate ->onStart(如果Service還沒有運行,則android先調(diào)用onCreate()然后調(diào)用onStart();如果Service已經(jīng)運行,則只調(diào)用onStart(),所以一個Service的onStart方法可能會重復(fù)調(diào)用多次 );StopService的時候直接onDestroy,如果是調(diào)用者自己直接退出而沒有調(diào)用StopService的話,Service會一直在后臺運行。該Service的調(diào)用者再啟動起來后可以通過stopService關(guān)閉Service。 注意,多次調(diào)用Context.startservice()不會嵌套(即使會有相應(yīng)的onStart()方法被調(diào)用),所以無論同一個服務(wù)被啟動了多少次,一旦調(diào)用Context.stopService()或者StopSelf(),他都會被停止。補充說明:傳遞給StartService(0的Intent對象會傳遞給onStart()方法。調(diào)用順序為:onCreate -->onStart(可多次調(diào)用) -->onDestroy。
(2) Context.bindService():Service會經(jīng)歷onCreate() -->onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調(diào)服務(wù)的方法,比如得到Service運行的狀態(tài)或其他操作。這個時候把調(diào)用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調(diào)用onUnbind -->onDestroyed相應(yīng)退出,所謂綁定在一起就共存亡了。
廣播接收器
在Android 中,Broadcast是一種廣泛運用的在應(yīng)用程序之間傳輸信息的機制。而BroadcastReceiver 是對發(fā)送出來的Broadcast進(jìn)行過濾接受并響應(yīng)的一類組件??梢允褂肂roadcastReceiver 來讓應(yīng)用對一個外部的事件做出響應(yīng)。這是非常有意思的,例如,當(dāng)電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進(jìn)行處理。例如,當(dāng)下載一個程序成功完成的時候,仍然可以利用BroadcastReceiver 進(jìn)行處理。BroadcastReceiver不能生成UI,也就是說對于用戶來說不是透明的,用戶是看不到的。BroadcastReceiver通過NotificationManager 來通知用戶這些事情發(fā)生了。BroadcastReceiver 既可以在AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進(jìn)行注冊。只要是注冊了,當(dāng)事件來臨的時候,即使程序沒有啟動,系統(tǒng)也在需要的時候啟動程序。各種應(yīng)用還可以通過使用Context.sendBroadcast () 將它們自己的Intent Broadcasts廣播給其他應(yīng)用程序。
內(nèi)容提供
Content Provider 是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案。
在Android[15]中,對數(shù)據(jù)的保護是很嚴(yán)密的,除了放在SD卡中的數(shù)據(jù),一個應(yīng)用所持有的數(shù)據(jù)庫、文件等內(nèi)容,都是不允許其他直接訪問的。Andorid當(dāng)然不會真的把每個應(yīng)用都做成一座孤島,它為所有應(yīng)用都準(zhǔn)備了一扇窗,這就是Content Provider。應(yīng)用想對外提供的數(shù)據(jù),可以通過派生Content Provider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標(biāo)識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現(xiàn)者不需要按照這個模式來做,給id的uri也可以返回列表類型的數(shù)據(jù),只要調(diào)用者明白,就無妨,不用苛求所謂的REST。
平臺優(yōu)勢
開放性
在優(yōu)勢方面,Android平臺首先就是其開放性,開發(fā)的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個嶄新的平臺也將很快走向成熟。
開放性對于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,最大的受益正是豐富的軟件資源。開放的平臺也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。
豐富的硬件
這一點還是與Android平臺的開放性相關(guān),由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會影響到數(shù)據(jù)同步、甚至軟件的兼容,如同從諾基亞Symbian風(fēng)格手機一下改用蘋果iPhone,同時還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。
方便開發(fā)
Android平臺提供給第三方開發(fā)商一個十分寬泛、自由的環(huán)境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟件會誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如何控制正是留給Android難題之一。
Google應(yīng)用
在互聯(lián)網(wǎng)的Google已經(jīng)走過10年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺手機將無縫結(jié)合這些優(yōu)秀的Google服務(wù)。
平臺事件
2019年6月7日,谷歌安全博客發(fā)文稱通過他們的供應(yīng)鏈已經(jīng)確認(rèn)部分Android設(shè)備的固件更新已經(jīng)被感染,以便于黑客安裝惡意程序。黑客利用名為“Triada”的惡意程序感染這些固件。[16]
不過話說回來,由于微軟已經(jīng)把安卓給賣了,所以現(xiàn)在安卓屬于谷歌,但畢竟也是微軟的老產(chǎn)品,就把它留著吧。