ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門(mén) / 進(jìn)階 / 社區(qū)互助

新手 | 你問(wèn)我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 13444|回復(fù): 0
上一主題 下一主題
[教程]

android系統(tǒng)架構(gòu)介紹

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
4Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。   
  Android是以L(fǎng)inux為核心的手機(jī)操作平臺(tái),作為一款開(kāi)放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開(kāi)發(fā)者使用多種編程語(yǔ)言來(lái)開(kāi)發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開(kāi)發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開(kāi)發(fā)者的歡迎,成為真正意義上的開(kāi)放式操作系統(tǒng)。   
  在A(yíng)ndroid中,開(kāi)發(fā)者可以使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可以通過(guò)NDK使用C/C++作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,也可使用SL4A來(lái)使用其他各種腳本語(yǔ)言進(jìn)行編程(如:python、lua、TCL、php等等),還有其他諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開(kāi)始支持Android編程,甚至通過(guò)MonoDroid,開(kāi)發(fā)者還可以使用C#作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對(duì)初學(xué)者的Android Simple語(yǔ)言,該語(yǔ)言類(lèi)似Basic語(yǔ)言。而在網(wǎng)頁(yè)編程語(yǔ)言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持Android開(kāi)發(fā)。   
  而在A(yíng)ndroid系統(tǒng)底層方面,Android使用C/C++作為開(kāi)發(fā)語(yǔ)言。   
  應(yīng)用程序(部分)   
  早期的Android應(yīng)用程序開(kāi)發(fā),通常通過(guò)Android SDK(Android軟件開(kāi)發(fā)包)下使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,但通過(guò)不同的軟件開(kāi)發(fā)包,則使用的編程語(yǔ)言也不同。   
  例如開(kāi)發(fā)者可以通過(guò)Android NDK(Android Native開(kāi)發(fā)包)使用C語(yǔ)言或者C++語(yǔ)言來(lái)作為編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序。同時(shí)谷歌還推出了適合初學(xué)者編程使用的Simple語(yǔ)言,該語(yǔ)言類(lèi)似微軟公司的Visual Basic語(yǔ)言。此外,谷歌公司還推出了Google App Inventor開(kāi)發(fā)工具,該開(kāi)發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開(kāi)發(fā)者。   
  Java開(kāi)發(fā)方面   
  Android支持使用Java作為編程語(yǔ)言來(lái)開(kāi)發(fā)應(yīng)用程序,而Android的Java開(kāi)發(fā)方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機(jī)的效率和資源占用,谷歌重新設(shè)計(jì)了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。  Android結(jié)構(gòu)其中Activity等同于J2ME的MIDlet,一個(gè) Activity 類(lèi)(Class)負(fù)責(zé)創(chuàng)建視窗(Windows),一個(gè)活動(dòng)中的Activity就是在 foreground(前景)模式,背景運(yùn)行的程序叫做Service。兩者之間通過(guò)由ServiceConnection和AIDL連結(jié),達(dá)到復(fù)數(shù)程序同時(shí)運(yùn)行效果。如果運(yùn)行中的 Activity 全部畫(huà)面被其他 Activity 取代時(shí),該 Activity 便被停止(Stopped),甚至被系統(tǒng)清除(Kill)。   
  View等同于J2ME的Displayable,程序人員可以通過(guò) View 類(lèi)與“XML layout”檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實(shí)Widget只是View的一種,所以可以使用xml來(lái)設(shè)計(jì)layout,HTC的Android Hero手機(jī)即含有大量的widget。至于ViewGroup 是各種layout 的基礎(chǔ)抽象類(lèi)(abstract class),ViewGroup之內(nèi)還可以有ViewGroup。View的構(gòu)造函數(shù)不需要再Activity中調(diào)用,但是Displayable的是必須的,在A(yíng)ctivity 中,要通過(guò)findViewById()來(lái)從XML 中取得View,Android的View類(lèi)的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關(guān),兩者之間通過(guò)Listener 結(jié)合在一起,每一個(gè)View都可以注冊(cè)一個(gè)event listener,例如:當(dāng)View要處理用戶(hù)觸碰(touch)的事件時(shí),就要向Android框架注冊(cè)View.OnClickListener。另外還有BitMap等同于J2ME的Image。   
  C/C++開(kāi)發(fā)方面   
  早期的Android開(kāi)發(fā)只支持Java作為編程語(yǔ)言開(kāi)發(fā)應(yīng)用程序,因而使得其他語(yǔ)言開(kāi)發(fā)者只能望而卻步。2010年4月,谷歌正式對(duì)開(kāi)發(fā)者發(fā)布了Android NDK,NDK允許開(kāi)發(fā)者使用C/C++作為編程語(yǔ)言來(lái)為Android開(kāi)發(fā)應(yīng)用程序,初版的NDK使得開(kāi)發(fā)者看到了C/C++在A(yíng)ndroid開(kāi)發(fā)中的希望。   
  但是,當(dāng)前版本的NDK在功能上還有很多局限性:NDK并沒(méi)有提供對(duì)應(yīng)用程序生命周期的維護(hù);NDK也不提供對(duì)Android系統(tǒng)中大量系統(tǒng)事件的支持;對(duì)于作為應(yīng)用程序交互接口的UI API,當(dāng)前版本的NDK中也沒(méi)有提供。但是相對(duì)于初版的NDK,現(xiàn)在的NDK已經(jīng)進(jìn)行了許多重大的功能改進(jìn)。   
  由此可見(jiàn),NDK仍然需要完善和發(fā)展,相信未來(lái)隨著NDK的發(fā)展,NDK可以做得更多更好。   
  中介軟件   
  操作系統(tǒng)與應(yīng)用程序的溝通橋梁,應(yīng)用分為兩層:函數(shù)層(Library)和虛擬機(jī)(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時(shí)包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背后的引擎。Surface flinger 是就2D或3D的內(nèi)容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自制的Bionic Libc。   
  Android采用OpenCORE作為基礎(chǔ)多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。   
  Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當(dāng),但相較于Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購(gòu),2007年初,Skia GL源碼被公開(kāi),目前Skia 也是Google Chrome 的圖形引擎。   
  Android的多媒體數(shù)據(jù)庫(kù)采用SQLite數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)又分為共用數(shù)據(jù)庫(kù)及私用數(shù)據(jù)庫(kù)。用戶(hù)可通過(guò)ContentResolver類(lèi)(Column)取得共用數(shù)據(jù)庫(kù)。   
  Android的中間層多以Java 實(shí)現(xiàn),并且采用特殊的Dalvik 虛擬機(jī)(Dalvik Virtual Machine)。Dalvik虛擬機(jī)是一種“暫存器型態(tài)”(Register Based)的Java虛擬機(jī),變量皆存放于暫存器中,虛擬機(jī)的指令相對(duì)減少。   
  Dalvik虛擬機(jī)可以有多個(gè)實(shí)例(instance), 每個(gè)Android應(yīng)用程序都用一個(gè)自屬的Dalvik虛擬機(jī)來(lái)運(yùn)行,讓系統(tǒng)在運(yùn)行程序時(shí)可達(dá)到優(yōu)化。Dalvik 虛擬機(jī)并非運(yùn)行Java字節(jié)碼(Bytecode),而是運(yùn)行一種稱(chēng)為.dex格式的文件。   
  硬件抽像層   
  Android 的 HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動(dòng)模塊。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開(kāi),讓 Android 不至過(guò)度依賴(lài) Linux kernel,以達(dá)成 kernel independent 的概念,也讓 Android framework 的開(kāi)發(fā)能在不考量驅(qū)動(dòng)程序?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 只要說(shuō)明“類(lèi)型”,即 module ID,就可以取得操作函數(shù)。   
  系統(tǒng)內(nèi)核   
  Android 是運(yùn)行于 Linux kernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux 里支持的功能,Android 大都沒(méi)有支持,包括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ū)動(dòng)程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開(kāi)。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),存儲(chǔ)器管理(Memory Management),程序管理(Process Management),網(wǎng)絡(luò)堆棧(Network Stack),驅(qū)動(dòng)程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構(gòu)建工具 Repo來(lái)初始化源碼。Repo 是 Android 用來(lái)輔助Git工作的一個(gè)工具。   
  安全權(quán)限機(jī)制   
  Android本身是一個(gè)權(quán)限分立的操作系統(tǒng)。在這類(lèi)操作系統(tǒng)中,每個(gè)應(yīng)用都以唯一的一個(gè)系統(tǒng)識(shí)別身份運(yùn)行(Linux用戶(hù)ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨(dú)立的識(shí)別方式。Linux就是這樣將應(yīng)用與應(yīng)用,應(yīng)用與系統(tǒng)隔離開(kāi)。   
  系統(tǒng)更多的安全功能通過(guò)權(quán)限機(jī)制提供。權(quán)限可以限制某個(gè)特定進(jìn)程的特定操作,也可以限制每個(gè)URI權(quán)限對(duì)特定數(shù)據(jù)段的訪(fǎng)問(wèn)。   
  Android安全架構(gòu)的核心設(shè)計(jì)思想是,在默認(rèn)設(shè)置下,所有應(yīng)用都沒(méi)有權(quán)限對(duì)其他應(yīng)用、系統(tǒng)或用戶(hù)進(jìn)行較大影響的操作。這其中包括讀寫(xiě)用戶(hù)隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫(xiě)其他應(yīng)用文件,訪(fǎng)問(wèn)網(wǎng)絡(luò)或阻止設(shè)備待機(jī)等。   
  安裝應(yīng)用時(shí),在檢查程序簽名提及的權(quán)限,且經(jīng)過(guò)用戶(hù)確認(rèn)后,軟件包安裝器會(huì)給予應(yīng)用權(quán)限。從用戶(hù)角度看,一款A(yù)ndroid應(yīng)用通常會(huì)要求如下的權(quán)限:   
  撥打電話(huà)、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫(xiě)入日程數(shù)據(jù)、讀取電話(huà)狀態(tài)或識(shí)別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡(luò)獲?。┑乩砦恢?、創(chuàng)建藍(lán)牙連接、對(duì)互聯(lián)網(wǎng)的完全訪(fǎng)問(wèn)、查看網(wǎng)絡(luò)狀態(tài),查看WiFi狀態(tài)、避免手機(jī)待機(jī)、修改系統(tǒng)全局設(shè)置、讀取同步設(shè)定、開(kāi)機(jī)自啟動(dòng)、重啟其他應(yīng)用、終止運(yùn)行中的應(yīng)用、設(shè)定偏好應(yīng)用、震動(dòng)控制、拍攝圖片等。   
  一款應(yīng)用應(yīng)該根據(jù)自身提供的功能,要求合理的權(quán)限。用戶(hù)也可以分析一款應(yīng)用所需權(quán)限,從而簡(jiǎn)單判定這款應(yīng)用是否安全。如一款應(yīng)用是不帶廣告的單機(jī)版,也沒(méi)有任何附加的內(nèi)容需要下載,那么它要求訪(fǎng)問(wèn)網(wǎng)絡(luò)的權(quán)限就比較可疑

上一篇:Android2.2中系統(tǒng)自帶樣式styles.xml的源代碼
下一篇:第26講:Android中的GPS應(yīng)用入門(mén).docx

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書(shū) | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-10-21 09:09 , Processed in 0.064129 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表