第一章 Android體系與系統(tǒng)架構(gòu)

Android 群英傳筆記
第一章Android體系與系統(tǒng)架構(gòu)
第二章 Android開(kāi)發(fā)工具及技巧
第三章 Android控件架構(gòu)與事件攔截機(jī)制
第四章 ListView 使用技巧
第五章 Android Scroll 分析
第六章 Android 繪圖機(jī)制與屏幕適配
第七章 Android 動(dòng)畫(huà)機(jī)制與使用技巧
第八章 Activity與Activity調(diào)用棧分析
第九章 Android 系統(tǒng)信息與安全機(jī)制
第十章 Android性能優(yōu)化
本文出自:
http://www.reibang.com/u/a1251e598483

Android的系統(tǒng)體系結(jié)構(gòu)分為四層循捺,自頂向下分別是:

  • 應(yīng)用程序(Applications)
  • 應(yīng)用程序框架(Application Frameworks)
  • 系統(tǒng)運(yùn)行庫(kù)與Android運(yùn)行環(huán)境(Libraris & Android Runtime)
  • Linux內(nèi)核(Linux Kernel)
安卓系統(tǒng)結(jié)構(gòu)示意圖

Application 層

使用NDK 開(kāi)發(fā)和使用Java 開(kāi)發(fā)的App 主要構(gòu)成 都有 Android Manifest 文件,Dalvik Classes,Resource Bundle 這幾個(gè)東西,使用NDK 還多了Libraries&JNI;

NDK 是什么 : 原生開(kāi)發(fā)工具包 (NDK) 是一組可讓您在 Android 應(yīng)用中利用 C 和 C++ 代碼的工具毯侦。 可用以從您自己的源代碼構(gòu)建喧笔,或者利用現(xiàn)有的預(yù)構(gòu)建庫(kù)。
NDK 不適用于大多數(shù)初學(xué)的 Android 編程者怕享,對(duì)許多類(lèi)型的 Android 應(yīng)用沒(méi)什么價(jià)值。 因?yàn)樗豢杀苊獾貢?huì)增加開(kāi)發(fā)過(guò)程的復(fù)雜性,所以通常不值得使用递鹉。 但如果您需要執(zhí)行以下操作弓候,它可能很有用:
1,從設(shè)備獲取卓越性能以用于計(jì)算密集型應(yīng)用郎哭,例如游戲或物理模擬。
2,重復(fù)使用您自己或其他開(kāi)發(fā)者的 C 或 C++ 庫(kù)菇存。

而我們大部分開(kāi)發(fā)的都是Java 應(yīng)用,基本上是屬于圖中最上面一層的開(kāi)發(fā).

應(yīng)用程序框架(Application Frameworks)

提供應(yīng)用程序開(kāi)發(fā)的各種API進(jìn)行快速開(kāi)發(fā)夸研,也即隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng),大部分使用Java編寫(xiě)依鸥,所謂官方源碼很多也就是看這里亥至,其中包括:

  • 豐富而又可擴(kuò)展的視圖(Views),可以用來(lái)構(gòu)建應(yīng)用程序贱迟, 它包括列表(lists)姐扮,網(wǎng)格(grids),文本框(text boxes)衣吠,按鈕(buttons)茶敏, 甚至可嵌入的web瀏覽器。
  • 內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問(wèn)另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù))蒸播, 或者共享它們自己的數(shù)據(jù)
  • 資源管理器(Resource Manager)提供 非代碼資源的訪問(wèn)睡榆,如本地字符串,圖形袍榆,和布局文件( layout files )胀屿。
  • 通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。
  • 活動(dòng)管理器( Activity Manager) 用來(lái)管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能包雀。

系統(tǒng)運(yùn)行庫(kù)與Android運(yùn)行環(huán)境(Libraris & Android Runtime)

1.系統(tǒng)運(yùn)行庫(kù)

Android 包含一些C/C++庫(kù)宿崭,這些庫(kù)能被Android系統(tǒng)中不同的組件使用。它們通過(guò) Android 應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)才写。以下是一些核心庫(kù):

  • Bionic系統(tǒng) C 庫(kù) - 一個(gè)從 BSD 繼承來(lái)的標(biāo)準(zhǔn) C 系統(tǒng)函數(shù)庫(kù)( libc )葡兑, 它是專(zhuān)門(mén)為基于 embedded linux 的設(shè)備定制的。
  • 媒體庫(kù) - 基于 PacketVideo OpenCORE赞草;該庫(kù)支持多種常用的音頻讹堤、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件厨疙。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 洲守。
  • Surface Manager - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提 供了2D和3D圖層的無(wú)縫融合。這部分代碼
  • Webkit,LibWebCore - 一個(gè)最新的web瀏覽器引擎用梗醇,支持Android瀏覽器和一個(gè)可嵌入的web視圖知允。鼎鼎大名的 Apple Safari背后的引擎就是Webkit
  • SGL - 底層的2D圖形引擎
  • 3D libraries - 基于OpenGL ES 1.0 APIs實(shí)現(xiàn);該庫(kù)可以使用硬件 3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速叙谨。
  • FreeType -位圖(bitmap)和矢量(vector)字體顯示温鸽。
  • SQLite - 一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎手负。

還有部分上面沒(méi)有顯示出來(lái)的就是硬件抽象層涤垫。其實(shí)Android并非講所有的設(shè)備驅(qū)動(dòng)都放在linux內(nèi)核里面,而是實(shí)現(xiàn)在userspace空間竟终,這么做的主要原因是GPL協(xié)議雹姊,Linux是遵循該 協(xié)議來(lái)發(fā)布的,也就意味著對(duì) linux內(nèi)核的任何修改衡楞,都必須發(fā)布其源代碼。而現(xiàn)在這么做就可以避開(kāi)而無(wú)需發(fā)布其源代碼敦姻,畢竟它是用來(lái)賺錢(qián)的瘾境。 而 在linux內(nèi)核中為這些userspace驅(qū)動(dòng)代碼開(kāi)一個(gè)后門(mén),就可以讓本來(lái)userspace驅(qū)動(dòng)不可以直接控制的硬件可以被訪問(wèn)镰惦。而只需要公布這個(gè) 后門(mén)代碼即可迷守。一般情況下如果要將Android移植到其他硬件去運(yùn)行,只需要實(shí)現(xiàn)這部分代碼即可旺入。包括:顯示器驅(qū)動(dòng)兑凿,聲音,相機(jī)茵瘾,GPS,GSM等等

2. Android運(yùn)行環(huán)境

該核心庫(kù)提供了JAVA編程語(yǔ)言核心庫(kù)的大多數(shù)功能礼华。
每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn) 行,都擁有一個(gè)獨(dú)立的Dalvik虛擬 機(jī)實(shí)例拗秘。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)圣絮。 Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了 優(yōu)化雕旨。同時(shí)虛擬機(jī)是基于寄存器的扮匠,所有的類(lèi)都經(jīng)由JAVA編譯器編譯,然后通過(guò)SDK中 的 "dx" 工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行凡涩。

App 安裝到設(shè)備后棒搜,每個(gè) Android 應(yīng)用都運(yùn)行在自己的安全沙箱內(nèi):
Android 操作系統(tǒng)是一種多用戶(hù) Linux 系統(tǒng),其中的每個(gè)應(yīng)用都是一個(gè)不同的用戶(hù)活箕;
默認(rèn)情況下力麸,系統(tǒng)會(huì)為每個(gè)應(yīng)用分配一個(gè)唯一的 Linux 用戶(hù) ID(該 ID 僅由系統(tǒng)使用,應(yīng)用并不知曉)。系統(tǒng)為應(yīng)用中的所有文件設(shè)置權(quán)限末盔,使得只有分配給該應(yīng)用的用戶(hù) ID 才能訪問(wèn)這些文件筑舅;
每個(gè)進(jìn)程都具有自己的虛擬機(jī) (VM),因此應(yīng)用代碼是在與其他應(yīng)用隔離的環(huán)境中運(yùn)行陨舱;
默認(rèn)情況下翠拣,每個(gè)應(yīng)用都在其自己的 Linux 進(jìn)程內(nèi)運(yùn)行。Android 會(huì)在需要執(zhí)行任何應(yīng)用組件時(shí)啟動(dòng)該進(jìn)程游盲,然后在不再需要該進(jìn)程或系統(tǒng)必須為其他應(yīng)用恢復(fù)內(nèi)存時(shí)關(guān)閉該進(jìn)程误墓。
Android 系統(tǒng)可以通過(guò)這種方式實(shí)現(xiàn) 最小權(quán)限原則。也就是說(shuō)益缎,默認(rèn)情況下谜慌,每個(gè)應(yīng)用都只能訪問(wèn)執(zhí)行其工作所需的組件,而不能訪問(wèn)其他組件莺奔。 這樣便營(yíng)造出一個(gè)非常安全的環(huán)境欣范,在這個(gè)環(huán)境中,應(yīng)用無(wú)法訪問(wèn)系統(tǒng)中其未獲得權(quán)限的部分令哟。
不過(guò)恼琼,應(yīng)用仍然可以通過(guò)一些途徑與其他應(yīng)用共享數(shù)據(jù)以及訪問(wèn)系統(tǒng)服務(wù):
可以安排兩個(gè)應(yīng)用共享同一 Linux 用戶(hù) ID,在這種情況下屏富,它們能夠相互訪問(wèn)彼此的文件晴竞。 為了節(jié)省系統(tǒng)資源,可以安排具有相同用戶(hù) ID 的應(yīng)用在同一 Linux 進(jìn)程中運(yùn)行狠半,并共享同一 VM(應(yīng)用還必須使用相同的證書(shū)簽署)噩死。
應(yīng)用可以請(qǐng)求訪問(wèn)設(shè)備數(shù)據(jù)(如用戶(hù)的聯(lián)系人、短信神年、可裝載存儲(chǔ)裝置 [SD 卡]已维、相機(jī)、藍(lán)牙等)的權(quán)限已日。 用戶(hù)必須明確授予這些權(quán)限衣摩。

  • 在 Android 上,一個(gè)應(yīng)用程序只有一個(gè)UID捂敌,當(dāng)然多個(gè)應(yīng)用程序也可以共享一個(gè)UID艾扮。
    不同的應(yīng)用程序可以運(yùn)行在相同的進(jìn)程中。對(duì)于此方法占婉,首先必須使用相同的私鑰簽署這些應(yīng)用程序泡嘴,然后必須使用 manifest 文件給它們分配相同的 Linux 用戶(hù) ID,這通過(guò)用相同的值/名定義 manifest 屬性 android:sharedUserId 來(lái)做到逆济,從而共享對(duì)其數(shù)據(jù)和代碼的訪問(wèn)
  • 一個(gè)進(jìn)程就是host應(yīng)用程序的沙箱酌予,里面一般有一個(gè)UID和多個(gè)GIDS磺箕,每個(gè)進(jìn)程只能訪問(wèn)UID的權(quán)限范圍內(nèi)的文件和GIDs所允許訪問(wèn)的接口,構(gòu)成了Android最基本的安全基礎(chǔ)抛虫。

Linux內(nèi)核(Linux Kernel)

Android的核心系統(tǒng)服務(wù)依賴(lài)于Linux 2.6 內(nèi)核松靡,如安全性,內(nèi)存管理建椰,進(jìn)程管理雕欺, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。 Linux 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層棉姐。其外還對(duì)其做了部分修改屠列,主要涉及兩部分修改:

  • Binder (IPC):提供有效的進(jìn)程間通信,雖然linux內(nèi)核本身已經(jīng)提供了這些功能伞矩,但Android系統(tǒng)很多服務(wù)都需要用到該功能笛洛,為了某種原因其實(shí)現(xiàn)了自己的一套。
  • 電源管理:主要是為了省電乃坤,畢竟是手持設(shè)備嘛苛让,低耗電才是我們的追求。

四大組件

Acitivity, BroadCastReciever ,ContentProvider 和Service.
Android 系統(tǒng)提供一個(gè)信使 Intent , 組件與組件之間通過(guò)Intent 來(lái)通信,傳遞信息,交換數(shù)據(jù)
Context 的已經(jīng)寫(xiě)過(guò)了 參考 http://www.reibang.com/p/4f90ee8c92fe

查看手機(jī)根目錄
連接上手機(jī),輸入adb shell,輸入 cd /system/app/ 使用Linux的ls命令,查看目錄

清單文件

在 Android 系統(tǒng)啟動(dòng)應(yīng)用組件之前湿诊,系統(tǒng)必須通過(guò)讀取應(yīng)用的 AndroidManifest.xml 文件(“清單”文件)確認(rèn)組件存在蝌诡。 您的應(yīng)用必須在此文件中聲明其所有組件,該文件必須位于應(yīng)用項(xiàng)目目錄的根目錄中枫吧。

除了聲明應(yīng)用的組件外,清單文件還有許多其他作用宇色,如:

  • 確定應(yīng)用需要的任何用戶(hù)權(quán)限九杂,如互聯(lián)網(wǎng)訪問(wèn)權(quán)限或?qū)τ脩?hù)聯(lián)系人的讀取權(quán)限
  • 根據(jù)應(yīng)用使用的 API,聲明應(yīng)用所需的最低API 級(jí)別和軟件功能宣蠕,如相機(jī)例隆、藍(lán)牙服務(wù)或多點(diǎn)觸摸屏幕
  • 應(yīng)用需要鏈接的 API 庫(kù)(Android 框架 API 除外),如 Google 地圖庫(kù)
  • 其他功能

參考 :
<Android 群英傳> https://item.jd.com/11758334.html
https://developer.android.google.cn/guide/components/fundamentals.html#Resources
https://hit-alibaba.github.io/interview/Android/basic/Android-Arch.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抢蚀,一起剝皮案震驚了整個(gè)濱河市镀层,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皿曲,老刑警劉巖唱逢,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屋休,居然都是意外死亡坞古,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)劫樟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痪枫,“玉大人织堂,你說(shuō)我怎么就攤上這事∧坛拢” “怎么了易阳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吃粒。 經(jīng)常有香客問(wèn)我潦俺,道長(zhǎng),這世上最難降的妖魔是什么声搁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任黑竞,我火速辦了婚禮,結(jié)果婚禮上疏旨,老公的妹妹穿的比我還像新娘很魂。我一直安慰自己,他們只是感情好檐涝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布遏匆。 她就那樣靜靜地躺著,像睡著了一般谁榜。 火紅的嫁衣襯著肌膚如雪幅聘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天窃植,我揣著相機(jī)與錄音帝蒿,去河邊找鬼。 笑死巷怜,一個(gè)胖子當(dāng)著我的面吹牛葛超,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播延塑,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绣张,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了关带?” 一聲冷哼從身側(cè)響起侥涵,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宋雏,沒(méi)想到半個(gè)月后芜飘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磨总,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年燃箭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舍败。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡招狸,死狀恐怖敬拓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裙戏,我是刑警寧澤乘凸,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站累榜,受9級(jí)特大地震影響营勤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壹罚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一葛作、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猖凛,春花似錦赂蠢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至菠红,卻和暖如春第岖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背试溯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工蔑滓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遇绞。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓键袱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親试读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容