熟悉Android源码目录结构
开发者需要了解系统运行的机制,了解一定深度的原理,而不是仅停留在会调用系统提供的API层面。阅读源码需要对源码目录结构有所了解,不然的话可能都找不到方向,因为整个Android项目很庞大复杂。源码按照一定的架构组织起来,详见Android 开源项目简介。

1、源码根目录
Android源码下载下来,根目录下很多一级子目录,每个目录都对应一层架构或者一块框架。

①art:ART运行环境
②bionic:Android的C library基础库,NDK的API
③bottable:启动引导程序相关代码
④build:存放系统编译规则及generic等基础开发包配置(脚本和工具)
⑤cts:Compatibility Test Suite的缩写,Android兼容性标准测试套件
⑥dalvik:dalvik java虚拟机
⑦developers:应用程序开发demo
⑧devices:设备相关的代码和编译脚本
⑨docs:AOSP文档
⑩external:其它平台移植项目
⑪frameworks:应用程序核心框架,Android系统的核心(Java和C++)
⑫hardware:各手机厂商的硬件适配层HAL代码,硬件驱动相关。
⑬kernel:Android Linux系统内核
⑭libcore:核心库
⑮libnativehelper:动态库、实现JNI的基础库
⑯packages:Android原生应用程序包,ROM应用开发者需要了解
⑰pdk:Plug Development Kit的缩写,本地开发套件
⑱plateform_testing:平台测试相关
⑲prebuilts:预编译资源
⑳sdk:SDK和模拟器
㉑system:系统底层(C语言)
㉒test:测试相关
㉓toolchain:工具链文件
㉔tools:工具文件
㉕vendor:厂商定制代码
2、frameworks
Android应用开发者最要关注的就是Framework层的源码,在frameworks目录下。
2.1、frameworks目录结构
frameworks目录中还有很多目录,不过只需要关注base中的源码,其它都不是重点。

2.2、../base
这里面才是frameworks层最基础核心的代码,主要还是框架层面,涉及到图形图像、NFC、WiFi、蓝牙等硬件、系统服务等。
①sax:sax实现
②obex:蓝牙传输库
③services:各种系统服务
④telephony:电话通讯相关的源码,联系人、短信相关的开发需要关注
⑤libs:存储、USB相关
⑥core:核心库
⑦graphics:图形相关
⑧opengl:2D-3D加速库
⑨docs:文档
⑩packages:系统应用。与根目录下的/packages区别,也有系统应用比如Settings
⑪wifi:WiFi相关源码
⑫native:JNI
⑬tools:工具相关
⑭nfc:NFC相关
⑮data:字体、声音等数据文件
2.3、../base/core
看到这个目录会眼前一亮,这些目录下就是Android开发者日常开发所熟悉的代码。
/frameworks/base/core/java
|--android
|--com
|--android
|--internal
|--server
|--google
|--android
有两个子目录需要关注:
①/frameworks/base/core/java/android
②/frameworks/base/core/java/com/android/internal
2.4、../base/services
该目录下的源码设计到各种服务程序,如:电源管理、传感器等。重点关注/frameworks/base/services/core/java/com/android/server目录下的系统服务源码。
3、packages
还有系统服务/应用的源码在packages目录下。
3.1、packages目录
主要是系统apps(系统应用)、services(系统服务)、provider(系统Provider内容提供器)、inputmethods(输入法相关)等。

3.2、../apps
该目录下“预装”系统应用和基础服务:Launcher3(桌面)、Music(音乐)、QuickSearchBox(搜索)、ExactCalculator、Calendar(日历)、Car(驾驶模式)等。各个手机厂商定制的ROM主要对这些应用进行二次开发,丰富功能还有重新设计UI。
它们和普通开发的APP没有多大区别,甚至可以单独拷贝出来当成独立的APP编译apk运行。
推荐资料:
最全的Android源码目录结构详解
源码目录结构及源码阅读工具简介
Android系统源代码目录与系统目录
详解Android源码目录