Android Source Dir Architecture 系统源码目录结构

Android Source Architecture


相信各位对于Android系统架构图的三层或四层结构已经了然于胸,迫不及待想要膜拜一下源码,但是可能好不容易下载好源码打开一看就懵逼了:这目录是啥?这又是啥?其实Android源码目录名字已经很浅显地表明了目录的内容和功能,但对于初学者特别是背景知识不够宽宏的初学者而言还是有点摸不着头脑。本文简单介绍Android系统源码目录结构,好让读者对Android源码有一个整体的概念,这样当深入到某一模块研究的时候能够同时心中有全局。
首先要了解一个理念:Android源码以什么样的原则来分包和存放。从目录看,Android很自然地将源码分为Core、External和Package三种,其中Core是核心工程,在根目录的各个文件夹中,External是扩展工程,使用其他开源项目扩展的功能,在external文件夹中,Package是提供应用程序和服务的,在package中,平时用到的各种系统应用就是在这里面写就的。
以下按层次结构依次标注目录功能(源码版本:android_4.4.1-r1):


.├── abi                application binary interface,应用程序二进制接口├── art                art虚拟机├── bionic             [Build] bionic C运行时支持:libc、libm、libdl、动态linker├── bootable           启动引导相关代码├── build              [Build]存放系统编译规则及generic等基础开发配置├── cts                Android兼容性测试套件标准├── dalvik             dalvik虚拟机├── developers         开发者相关├── development        应用程序开发相关├── device             设备相关代码(厂商定制代码就放在这里)├── docs               开源相关文档├── external           Android使用的开源模块├── frameworks         核心框架,包含Java source和C++ source├── hardware           主要是硬件适配层HAL├── libcore            核心库相关├── libnativehelper    动态库,是实现JNI的基础├── Makefile           [Build]make的入口点,其内容只有一句话即include build/core/main.mk├── ndk                ndk相关代码├── out                编译输出文件夹,默认编译完成后的结果输出到此目录├── packages           应用程序包├── pdk                Plug Development Kit,本地开发套件├── prebuilts          预编译的资源(例如Linux-Kernel,分为x86和arm架构)├── sdk                sdk及模拟器相关代码├── system             文件系统和应用组件,c/c++代码├── tools              工具文件夹,如gradle等

作为开发者根据自己的需要可以对不同部分加以关注,我们主要关注packages和frameworks目录。我们打开frameworks,发现它的目录结构如下:


./frameworks/├── av                      Audio/Video│   ├── camera              相机│   ├── CleanSpec.mk        本模块的清除步骤,下同│   ├── cmds                command目录,包含录屏和stagefright两个子目录│   ├── drm                 digital rights management相关│   ├── include             头文件│   ├── libvideoeditor      视频编辑器库│   ├── media               媒体│   ├── MODULE_LICENSE_APACHE2    开源协议│   ├── NOTICE              声明│   ├── services            服务,包含audioflinger,camera和medialog│   └── tools               工具├── base                    基础定义,我们主要关注这个文件夹下的内容│   ├── Android.mk          本模块的编译步骤,下同│   ├── api                 当前api定义,如果api有变化这个文件会相应更新│   ├── CleanSpec.mk│   ├── cmds│   ├── core                framework核心代码,实现了几乎所有底层功能,包含java和c/c++代码,android.xx.xx/com.android.internal.xx/com.android.server的NetworkObserver代码位于这里│   ├── data                数据文件夹,包含字体、键盘定义、声音、视频等数据│   ├── docs                文档│   ├── drm                 版权保护│   ├── 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                 下面的内容不再一一介绍,用到的时候再去详解也不迟│   ├── 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系统的源码是非常庞大而复杂的,源码研究是一项艰苦而持久的任务。世上无难事只怕有心人,下面我们看点轻松的好理解的内容:


./packages/├── apps                    应用程序库├── experimental            实验性的库(打印服务,bug汇报,通知,RPC等)├── inputmethods            输入法├── providers               四大组建之一Provider的系统自带模块├── screensavers            屏保├── services                系统服务(电话服务)└── wallpapers              壁纸

有了以上的准备,阅读起源码来就心里有数,想要找什么代码也有了大致的搜索范围。
下面特别指出一些库的位置,有兴趣的可自行阅读:



系统C库 bionic


媒体库 frameworks/av/media


图形显示库 frameworks/native/services/surfaceflinger


网络引擎库 external/webp, external/webrtc


3D图形库 frameworks/native/opengl


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



更详细的目录知识参见Android源码目录结构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,506评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,024评论 4 62
  • 悠然若天边阅读 136评论 0 0
  • 在家乡我有一个堂弟媳妇,还有一个表弟媳妇,因为我们那个时代的独生子女多,因此亲兄弟姐妹就少了,连我们这一辈的亲戚都...
    精进的医生阅读 1,309评论 9 22
  • 今儿个真高兴
    快乐骑士5阅读 244评论 0 0