Android Source Dir Architecture 系統(tǒng)源碼目錄結(jié)構(gòu)

Android Source Architecture


相信各位對于Android系統(tǒng)架構(gòu)圖的三層或四層結(jié)構(gòu)已經(jīng)了然于胸,迫不及待想要膜拜一下源碼酬蹋,但是可能好不容易下載好源碼打開一看就懵逼了:這目錄是啥及老?這又是啥抽莱?其實Android源碼目錄名字已經(jīng)很淺顯地表明了目錄的內(nèi)容和功能,但對于初學(xué)者特別是背景知識不夠?qū)捄甑某鯇W(xué)者而言還是有點摸不著頭腦骄恶。本文簡單介紹Android系統(tǒng)源碼目錄結(jié)構(gòu)食铐,好讓讀者對Android源碼有一個整體的概念,這樣當(dāng)深入到某一模塊研究的時候能夠同時心中有全局僧鲁。
首先要了解一個理念:Android源碼以什么樣的原則來分包和存放虐呻。從目錄看,Android很自然地將源碼分為Core寞秃、External和Package三種斟叼,其中Core是核心工程,在根目錄的各個文件夾中春寿,External是擴展工程朗涩,使用其他開源項目擴展的功能,在external文件夾中堂淡,Package是提供應(yīng)用程序和服務(wù)的馋缅,在package中,平時用到的各種系統(tǒng)應(yīng)用就是在這里面寫就的绢淀。
以下按層次結(jié)構(gòu)依次標(biāo)注目錄功能(源碼版本:android_4.4.1-r1):


.├── abi                application binary interface萤悴,應(yīng)用程序二進制接口├── art                art虛擬機├── bionic             [Build] bionic C運行時支持:libc、libm皆的、libdl覆履、動態(tài)linker├── bootable           啟動引導(dǎo)相關(guān)代碼├── build              [Build]存放系統(tǒng)編譯規(guī)則及generic等基礎(chǔ)開發(fā)配置├── cts                Android兼容性測試套件標(biāo)準(zhǔn)├── dalvik             dalvik虛擬機├── developers         開發(fā)者相關(guān)├── development        應(yīng)用程序開發(fā)相關(guān)├── device             設(shè)備相關(guān)代碼(廠商定制代碼就放在這里)├── docs               開源相關(guān)文檔├── external           Android使用的開源模塊├── frameworks         核心框架,包含Java source和C++ source├── hardware           主要是硬件適配層HAL├── libcore            核心庫相關(guān)├── libnativehelper    動態(tài)庫费薄,是實現(xiàn)JNI的基礎(chǔ)├── Makefile           [Build]make的入口點硝全,其內(nèi)容只有一句話即include build/core/main.mk├── ndk                ndk相關(guān)代碼├── out                編譯輸出文件夾,默認(rèn)編譯完成后的結(jié)果輸出到此目錄├── packages           應(yīng)用程序包├── pdk                Plug Development Kit楞抡,本地開發(fā)套件├── prebuilts          預(yù)編譯的資源(例如Linux-Kernel伟众,分為x86和arm架構(gòu))├── sdk                sdk及模擬器相關(guān)代碼├── system             文件系統(tǒng)和應(yīng)用組件,c/c++代碼├── tools              工具文件夾召廷,如gradle等

作為開發(fā)者根據(jù)自己的需要可以對不同部分加以關(guān)注凳厢,我們主要關(guān)注packages和frameworks目錄。我們打開frameworks竞慢,發(fā)現(xiàn)它的目錄結(jié)構(gòu)如下:


./frameworks/├── av                      Audio/Video│   ├── camera              相機│   ├── CleanSpec.mk        本模塊的清除步驟先紫,下同│   ├── cmds                command目錄,包含錄屏和stagefright兩個子目錄│   ├── drm                 digital rights management相關(guān)│   ├── include             頭文件│   ├── libvideoeditor      視頻編輯器庫│   ├── media               媒體│   ├── MODULE_LICENSE_APACHE2    開源協(xié)議│   ├── NOTICE              聲明│   ├── services            服務(wù)筹煮,包含audioflinger遮精,camera和medialog│   └── tools               工具├── base                    基礎(chǔ)定義,我們主要關(guān)注這個文件夾下的內(nèi)容│   ├── Android.mk          本模塊的編譯步驟败潦,下同│   ├── api                 當(dāng)前api定義本冲,如果api有變化這個文件會相應(yīng)更新│   ├── CleanSpec.mk│   ├── cmds│   ├── core                framework核心代碼准脂,實現(xiàn)了幾乎所有底層功能,包含java和c/c++代碼眼俊,android.xx.xx/com.android.internal.xx/com.android.server的NetworkObserver代碼位于這里│   ├── data                數(shù)據(jù)文件夾意狠,包含字體粟关、鍵盤定義疮胖、聲音、視頻等數(shù)據(jù)│   ├── docs                文檔│   ├── drm                 版權(quán)保護│   ├── graphics            圖形│   ├── include             ...│   ├── keystore│   ├── libs│   ├── location│   ├── media│   ├── MODULE_LICENSE_APACHE2│   ├── native│   ├── nfc-extras│   ├── NOTICE│   ├── obex│   ├── opengl│   ├── packages│   ├── policy│   ├── preloaded-classes│   ├── samples│   ├── sax│   ├── services            com.android.server的大部分代碼位于這里│   ├── telephony│   ├── test-runner│   ├── tests│   ├── tools│   └── wifi├── compile                 下面的內(nèi)容不再一一介紹闷板,用到的時候再去詳解也不遲│   ├── libbcc│   ├── mclinker│   └── slang├── ex│   ├── camera2│   ├── carousel│   ├── chips│   ├── CleanSpec.mk│   ├── common│   ├── photoviewer│   ├── variablespeed│   └── widget├── mff├── ml│   ├── Android.mk│   └── bordeaux├── native│   ├── build│   ├── cmds│   ├── data│   ├── include│   ├── libs│   ├── MODULE_LICENSE_APACHE2│   ├── NOTICE│   ├── opengl│   └── services├── opt│   ├── calendar│   ├── carddav│   ├── colorpicker│   ├── datetimepicker│   ├── emoji│   ├── inputmethodcommon│   ├── mailcommon│   ├── mms│   ├── net│   ├── photoviewer│   ├── telephony│   ├── timezonepicker│   └── vcard├── rs│   ├── Android.mk│   ├── CleanSpec.mk│   ├── cpp│   ├── cpu_ref│   ├── driver│   ├── java│   ├── rsAdapter.cpp│   ├── rsAdapter.h│   ├── rsAllocation.cpp│   ├── rsAllocation.h│   ├── rsAnimation.cpp│   ├── rsAnimation.h│   ├── rsCompatibilityLib.cpp│   ├── rsCompatibilityLib.h│   ├── rsComponent.cpp│   ├── rsComponent.h│   ├── rsContext.cpp│   ├── rsContext.h│   ├── rsCppUtils.cpp│   ├── rsCppUtils.h│   ├── rsDebugHelper.h│   ├── rsDefines.h│   ├── rsDevice.cpp│   ├── rsDevice.h│   ├── rsElement.cpp│   ├── rsElement.h│   ├── rsEnv.h│   ├── rsFBOCache.cpp│   ├── rsFBOCache.h│   ├── rsFifo.h│   ├── rsFifoSocket.cpp│   ├── rsFifoSocket.h│   ├── rsFileA3D.cpp│   ├── rsFileA3D.h│   ├── rsFont.cpp│   ├── rsFont.h│   ├── rsgApi.cpp.rsg│   ├── rsgApiFuncDecl.h.rsg│   ├── rsgApiReplay.cpp.rsg│   ├── rsgApiStructs.h.rsg│   ├── rsg_generator.c│   ├── rsGrallocConsumer.cpp│   ├── rsGrallocConsumer.h│   ├── rsg.spec│   ├── rs.h│   ├── rs_hal.h│   ├── rsMatrix2x2.cpp│   ├── rsMatrix2x2.h│   ├── rsMatrix3x3.cpp│   ├── rsMatrix3x3.h│   ├── rsMatrix4x4.cpp│   ├── rsMatrix4x4.h│   ├── rsMesh.cpp│   ├── rsMesh.h│   ├── rsMutex.cpp│   ├── rsMutex.h│   ├── rs_native.spec│   ├── rsObjectBase.cpp│   ├── rsObjectBase.h│   ├── rsPath.cpp│   ├── rsPath.h│   ├── rsProgramBase.h│   ├── rsProgram.cpp│   ├── rsProgramFragment.cpp│   ├── rsProgramFragment.h│   ├── rsProgram.h│   ├── rsProgramRaster.cpp│   ├── rsProgramRaster.h│   ├── rsProgramStore.cpp│   ├── rsProgramStore.h│   ├── rsProgramVertex.cpp│   ├── rsProgramVertex.h│   ├── rsRuntime.h│   ├── rsSampler.cpp│   ├── rsSampler.h│   ├── rsScriptC.cpp│   ├── rsScriptC.h│   ├── rsScriptC_Lib.cpp│   ├── rsScriptC_LibGL.cpp│   ├── rsScript.cpp│   ├── rsScriptGroup.cpp│   ├── rsScriptGroup.h│   ├── rsScript.h│   ├── rsScriptIntrinsic.cpp│   ├── rsScriptIntrinsic.h│   ├── rsSignal.cpp│   ├── rsSignal.h│   ├── rs.spec│   ├── rsStream.cpp│   ├── rsStream.h│   ├── rsThreadIO.cpp│   ├── rsThreadIO.h│   ├── rsType.cpp│   ├── rsType.h│   ├── rsUtils.h│   ├── scriptc│   ├── server│   ├── spec.h│   ├── spec.l│   └── tests├── support│   ├── build.gradle│   ├── CleanSpec.mk│   ├── local.properties│   ├── settings.gradle│   ├── tests│   ├── v13│   ├── v4│   ├── v7│   └── v8├── testing│   ├── Android.mk│   ├── androidtestlib│   ├── app-tests│   ├── MODULE_LICENSE_APACHE2│   ├── uiautomator│   └── uiautomator_test_libraries├── uiautomator│   ├── Android.mk│   ├── api│   ├── apicheck_msg_current.txt│   ├── apicheck_msg_last.txt│   ├── BuildConstants.java.in│   ├── cmds│   ├── MODULE_LICENSE_APACHE2│   ├── samples│   ├── src│   ├── tests│   └── utils├── volley│   ├── AndroidManifest.xml│   ├── Android.mk│   ├── build.gradle│   ├── build.xml│   ├── custom_rules.xml│   ├── proguard.cfg│   ├── proguard-project.txt│   ├── project.properties│   ├── src│   └── tests├── webview│   ├── Android.mk│   └── chromium└── wilhelm├── doc├── include├── src├── tests└── tools

以上可以看出android系統(tǒng)的源碼是非常龐大而復(fù)雜的澎灸,源碼研究是一項艱苦而持久的任務(wù)。世上無難事只怕有心人遮晚,下面我們看點輕松的好理解的內(nèi)容:


./packages/├── apps                    應(yīng)用程序庫├── experimental            實驗性的庫(打印服務(wù)性昭,bug匯報,通知县遣,RPC等)├── inputmethods            輸入法├── providers               四大組建之一Provider的系統(tǒng)自帶模塊├── screensavers            屏保├── services                系統(tǒng)服務(wù)(電話服務(wù))└── wallpapers              壁紙

有了以上的準(zhǔn)備糜颠,閱讀起源碼來就心里有數(shù),想要找什么代碼也有了大致的搜索范圍萧求。
下面特別指出一些庫的位置其兴,有興趣的可自行閱讀:



系統(tǒng)C庫 bionic


媒體庫 frameworks/av/media


圖形顯示庫 frameworks/native/services/surfaceflinger


網(wǎng)絡(luò)引擎庫 external/webp, external/webrtc


3D圖形庫 frameworks/native/opengl


SQLite Java layer framworks/base/core/java/android/database, C++ layer external/sqlite



更詳細的目錄知識參見Android源碼目錄結(jié)構(gòu)

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夸政,隨后出現(xiàn)的幾起案子元旬,更是在濱河造成了極大的恐慌,老刑警劉巖守问,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀归,死亡現(xiàn)場離奇詭異,居然都是意外死亡耗帕,警方通過查閱死者的電腦和手機穆端,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仿便,“玉大人体啰,你說我怎么就攤上這事√皆剑” “怎么了狡赐?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钦幔。 經(jīng)常有香客問我枕屉,道長,這世上最難降的妖魔是什么鲤氢? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任搀擂,我火速辦了婚禮西潘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哨颂。我一直安慰自己喷市,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布威恼。 她就那樣靜靜地躺著品姓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箫措。 梳的紋絲不亂的頭發(fā)上腹备,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音斤蔓,去河邊找鬼植酥。 笑死,一個胖子當(dāng)著我的面吹牛弦牡,可吹牛的內(nèi)容都是我干的友驮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驾锰,長吁一口氣:“原來是場噩夢啊……” “哼卸留!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稻据,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤艾猜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捻悯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匆赃,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年今缚,在試婚紗的時候發(fā)現(xiàn)自己被綠了算柳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡姓言,死狀恐怖瞬项,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情何荚,我是刑警寧澤囱淋,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站餐塘,受9級特大地震影響妥衣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一税手、第九天 我趴在偏房一處隱蔽的房頂上張望蜂筹。 院中可真熱鬧,春花似錦芦倒、人聲如沸艺挪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻裳。三九已至,卻和暖如春周霉,著一層夾襖步出監(jiān)牢的瞬間掂器,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工俱箱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灭必。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓狞谱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親禁漓。 傳聞我的和親對象是個殘疾皇子跟衅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件播歼、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,101評論 4 62
  • 悠然若天邊閱讀 136評論 0 0
  • 在家鄉(xiāng)我有一個堂弟媳婦伶跷,還有一個表弟媳婦,因為我們那個時代的獨生子女多秘狞,因此親兄弟姐妹就少了叭莫,連我們這一輩的親戚都...
    精進的醫(yī)生閱讀 1,318評論 9 22
  • 今兒個真高興
    快樂騎士5閱讀 245評論 0 0