首頁 收藏 QQ群
 網(wǎng)站導航

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

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

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

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

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 14167|回復: 0
上一主題 下一主題
[教程]

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
4Android的系統(tǒng)架構和其它操作系統(tǒng)一樣,采用了分層的架構。android分為四個層,從高層到低層分別是應用程序?qū)?、應用程序框架層、系統(tǒng)運行庫層和linux核心層。   
  Android是以Linux為核心的手機操作平臺,作為一款開放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應用程序,而不再是以前只能使用Java開發(fā)Android應用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。   
  在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應用程序,也可以通過NDK使用C/C++作為編程語言來開發(fā)應用程序,也可使用SL4A來使用其他各種腳本語言進行編程(如:python、lua、TCL、php等等),還有其他諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發(fā)者還可以使用C#作為編程語言來開發(fā)應用程序。另外,谷歌還在2009年特別發(fā)布了針對初學者的Android Simple語言,該語言類似Basic語言。而在網(wǎng)頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經(jīng)支持Android開發(fā)。   
  而在Android系統(tǒng)底層方面,Android使用C/C++作為開發(fā)語言。   
  應用程序(部分)   
  早期的Android應用程序開發(fā),通常通過Android SDK(Android軟件開發(fā)包)下使用Java作為編程語言來開發(fā)應用程序,但通過不同的軟件開發(fā)包,則使用的編程語言也不同。   
  例如開發(fā)者可以通過Android NDK(Android Native開發(fā)包)使用C語言或者C++語言來作為編程語言開發(fā)應用程序。同時谷歌還推出了適合初學者編程使用的Simple語言,該語言類似微軟公司的Visual Basic語言。此外,谷歌公司還推出了Google App Inventor開發(fā)工具,該開發(fā)工具可以快速地構建應用程序,方便新手開發(fā)者。   
  Java開發(fā)方面   
  Android支持使用Java作為編程語言來開發(fā)應用程序,而Android的Java開發(fā)方面從接口到功能,都有層出不窮的變化??紤]到Java虛擬機的效率和資源占用,谷歌重新設計了Android的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。  Android結(jié)構其中Activity等同于J2ME的MIDlet,一個 Activity 類(Class)負責創(chuàng)建視窗(Windows),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結(jié),達到復數(shù)程序同時運行效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(Stopped),甚至被系統(tǒng)清除(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之內(nèi)還可以有ViewGroup。View的構造函數(shù)不需要再Activity中調(diào)用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結(jié)合在一起,每一個View都可以注冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架注冊View.OnClickListener。另外還有BitMap等同于J2ME的Image。   
  C/C++開發(fā)方面   
  早期的Android開發(fā)只支持Java作為編程語言開發(fā)應用程序,因而使得其他語言開發(fā)者只能望而卻步。2010年4月,谷歌正式對開發(fā)者發(fā)布了Android NDK,NDK允許開發(fā)者使用C/C++作為編程語言來為Android開發(fā)應用程序,初版的NDK使得開發(fā)者看到了C/C++在Android開發(fā)中的希望。   
  但是,當前版本的NDK在功能上還有很多局限性:NDK并沒有提供對應用程序生命周期的維護;NDK也不提供對Android系統(tǒng)中大量系統(tǒng)事件的支持;對于作為應用程序交互接口的UI API,當前版本的NDK中也沒有提供。但是相對于初版的NDK,現(xiàn)在的NDK已經(jīng)進行了許多重大的功能改進。   
  由此可見,NDK仍然需要完善和發(fā)展,相信未來隨著NDK的發(fā)展,NDK可以做得更多更好。   
  中介軟件   
  操作系統(tǒ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作為基礎多媒體框架。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的多媒體數(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應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統(tǒng)在運行程序時可達到優(yōu)化。Dalvik 虛擬機并非運行Java字節(jié)碼(Bytecode),而是運行一種稱為.dex格式的文件。   
  硬件抽像層   
  Android 的 HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅(qū)動模塊。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達成 kernel independent 的概念,也讓 Android framework 的開發(fā)能在不考量驅(qū)動程序?qū)崿F(xià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)內(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 為了達到商業(yè)應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅(qū)動程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開。bionic/libc/kernel/ 并非標準的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構與宏。   
  目前Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網(wǎng)絡堆棧(Network Stack),驅(qū)動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。   
  安全權限機制   
  Android本身是一個權限分立的操作系統(tǒng)。在這類操作系統(tǒng)中,每個應用都以唯一的一個系統(tǒng)識別身份運行(Linux用戶ID與群組ID)。系統(tǒng)的各部分也分別使用各自獨立的識別方式。Linux就是這樣將應用與應用,應用與系統(tǒng)隔離開。   
  系統(tǒng)更多的安全功能通過權限機制提供。權限可以限制某個特定進程的特定操作,也可以限制每個URI權限對特定數(shù)據(jù)段的訪問。   
  Android安全架構的核心設計思想是,在默認設置下,所有應用都沒有權限對其他應用、系統(tǒng)或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數(shù)據(jù)(聯(lián)系人或電子郵件),讀寫其他應用文件,訪問網(wǎng)絡或阻止設備待機等。   
  安裝應用時,在檢查程序簽名提及的權限,且經(jīng)過用戶確認后,軟件包安裝器會給予應用權限。從用戶角度看,一款Android應用通常會要求如下的權限:   
  撥打電話、發(fā)送短信或彩信、修改/刪除SD卡上的內(nèi)容、讀取聯(lián)系人的信息、讀取日程信的息,寫入日程數(shù)據(jù)、讀取電話狀態(tài)或識別碼、精確的(基于GPS)地理位置、模糊的(基于網(wǎng)絡獲取)地理位置、創(chuàng)建藍牙連接、對互聯(lián)網(wǎng)的完全訪問、查看網(wǎng)絡狀態(tài),查看WiFi狀態(tài)、避免手機待機、修改系統(tǒng)全局設置、讀取同步設定、開機自啟動、重啟其他應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。   
  一款應用應該根據(jù)自身提供的功能,要求合理的權限。用戶也可以分析一款應用所需權限,從而簡單判定這款應用是否安全。如一款應用是不帶廣告的單機版,也沒有任何附加的內(nèi)容需要下載,那么它要求訪問網(wǎng)絡的權限就比較可疑

上一篇:Android2.2中系統(tǒng)自帶樣式styles.xml的源代碼
下一篇:第26講:Android中的GPS應用入門.docx
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

GMT+8, 2025-2-3 09:56 , Processed in 0.064221 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2025 ZNDS.Com

快速回復 返回頂部 返回列表