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

Android Source Architecture


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


.├── abi                application binary interface,應(yīng)用程序二進(jìn)制接口├── art                art虛擬機(jī)├── bionic             [Build] bionic C運(yùn)行時(shí)支持:libc、libm、libdl、動(dòng)態(tài)linker├── bootable           啟動(dòng)引導(dǎo)相關(guān)代碼├── build              [Build]存放系統(tǒng)編譯規(guī)則及generic等基礎(chǔ)開發(fā)配置├── cts                Android兼容性測(cè)試套件標(biāo)準(zhǔn)├── dalvik             dalvik虛擬機(jī)├── 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            核心庫(kù)相關(guān)├── libnativehelper    動(dòng)態(tài)庫(kù),是實(shí)現(xiàn)JNI的基礎(chǔ)├── Makefile           [Build]make的入口點(diǎn),其內(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ù)自己的需要可以對(duì)不同部分加以關(guān)注,我們主要關(guān)注packages和frameworks目錄。我們打開frameworks,發(fā)現(xiàn)它的目錄結(jié)構(gòu)如下:


./frameworks/├── av                      Audio/Video│   ├── camera              相機(jī)│   ├── CleanSpec.mk        本模塊的清除步驟,下同│   ├── cmds                command目錄,包含錄屏和stagefright兩個(gè)子目錄│   ├── drm                 digital rights management相關(guān)│   ├── include             頭文件│   ├── libvideoeditor      視頻編輯器庫(kù)│   ├── media               媒體│   ├── MODULE_LICENSE_APACHE2    開源協(xié)議│   ├── NOTICE              聲明│   ├── services            服務(wù),包含audioflinger,camera和medialog│   └── tools               工具├── base                    基礎(chǔ)定義,我們主要關(guān)注這個(gè)文件夾下的內(nèi)容│   ├── Android.mk          本模塊的編譯步驟,下同│   ├── api                 當(dāng)前api定義,如果api有變化這個(gè)文件會(huì)相應(yīng)更新│   ├── CleanSpec.mk│   ├── cmds│   ├── core                framework核心代碼,實(shí)現(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)保護(hù)│   ├── 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)容不再一一介紹,用到的時(shí)候再去詳解也不遲│   ├── 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ù)雜的,源碼研究是一項(xiàng)艱苦而持久的任務(wù)。世上無難事只怕有心人,下面我們看點(diǎn)輕松的好理解的內(nèi)容:


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

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



系統(tǒng)C庫(kù) bionic


媒體庫(kù) frameworks/av/media


圖形顯示庫(kù) frameworks/native/services/surfaceflinger


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


3D圖形庫(kù) frameworks/native/opengl


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



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

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,304評(píng)論 4 61
  • 悠然若天邊閱讀 152評(píng)論 0 0
  • 在家鄉(xiāng)我有一個(gè)堂弟媳婦,還有一個(gè)表弟媳婦,因?yàn)槲覀兡莻€(gè)時(shí)代的獨(dú)生子女多,因此親兄弟姐妹就少了,連我們這一輩的親戚都...
    精進(jìn)的醫(yī)生閱讀 1,387評(píng)論 9 22
  • 今兒個(gè)真高興
    快樂騎士5閱讀 259評(píng)論 0 0

友情鏈接更多精彩內(nèi)容