Android 源码目录全解析:开发者必知的 AOSP 结构!

基础篇.源码目录简介

1. 职业规划篇
来聊聊安卓职业规划?整机开发大专能做么?
2.基础篇
基础篇.前言
基础篇.编译环境搭建
基础篇.源码目录简介
基础篇.系统 mk_bp 讲解
基础篇.开机动画定制
基础篇.定制桌面壁纸、导航方式
基础篇.系统属性、api 使用
基础篇.名称修改、名词介绍
基础篇.用 bugreport 带你看 Crash 和 ANR
基础篇.Provision 源码分析

3. 系统应用篇
系统应用篇.开机向导制作一
系统应用篇.开机向导制作二
系统应用篇.Settings 导航切换分析
系统应用篇.开机向导导航切换一
系统应用篇.开机向导导航切换二
系统应用篇.gms 制作集成
系统应用篇.开机向导适配 GMS
系统应用篇.Launcher3 结构剖析一
系统应用篇.Launcher3 结构剖析二
系统应用篇.Launcher3 结构剖析三
系统应用篇.Launcher3 图标加载流程一
系统应用篇.Launcher3 图标加载流程二
系统应用篇.Launcher3 桌面布局定制
系统应用篇.解密 Partner、google PAI 机制
系统应用篇.Partner 机制预制壁纸、默认布局
系统应用篇.Launcher 双排 Hotseat 定制一
系统应用篇.Launcher 双排 Hotseat 定制二
系统应用篇.Launcher 双排 Hotseat 定制三
系统应用篇.Launcher Taskbar 简介以及调出
系统应用篇.SystemUI 篇_用工具教会你看布局、进程
系统应用篇.SystemUI 结构讲解一
系统应用篇.SystemUI 结构讲解二
系统应用篇.SystemUI 的启动流程
系统应用篇.SystemUI 导航栏创建一
系统应用篇.SystemUI 导航栏创建二
系统应用篇.SystemUI 自定义导航按键
系统应用篇.SystemUI 快捷面板下拉流程
系统应用篇.SystemUI 定制禁用锁屏下拉通知栏
系统应用篇.SystemUI 通知注册流程
系统应用篇.SystemUI 通知发送流程

4. 系统篇
系统篇.SystemServer 篇_应用与系统进程间关系
系统篇.SystemServer 简介、自定义 Service 服务一
系统篇.SystemServer 简介、自定义 Service 服务二
系统篇.SystemServer 简介、自定义 Service 服务三
系统篇.SystemServer 简介、自定义 Service 服务四
系统篇.SELinux 问题解决套路一
系统篇.SELinux 问题解决套路二
系统篇.ActivityManagerService 简介
系统篇.WindowManagerService 简介一
系统篇.WindowManagerService 简介二
系统篇.PackageManagerService 简介一
系统篇.PackageManagerService 简介二
系统篇.FW 实战 - Letterbox 定制应用方向一
系统篇.FW 实战 - Letterbox 定制应用方向二
系统篇.分屏流程一
系统篇.分屏流程二

5. 性能篇
(省)低内存优化
性能篇 (省). 低内存查杀机制
性能篇 (省).SystemServer 与 LMK 的 socket 通信
性能篇 (省). 内核进程 LMKD
性能篇 (省). 内存分析
性能篇 (省). 内存泄漏定位与解决
(稳)稳定性优化
性能篇 (稳).WatchDog 检测机制一
性能篇 (稳).WatchDog 检测机制二
性能篇 (稳). 深入 Crash 捕获器流程一
性能篇 (稳). 深入 Crash 捕获器流程二
性能篇 (稳). 深入炸弹 ANR 流程一
性能篇 (稳). 深入炸弹 ANR 流程二
(快)开机优化
性能篇 (快). 开机耗时分析
性能篇 (快). 开机耗时优化
性能篇.实战优化方案分享
framework交流,答疑:251662478

Android 源码目录全解析:开发者必知的 AOSP 结构!
在深入 Android 系统开发 之前,我们必须先搞清楚 AOSP(Android Open Sourc
e Project)源码结构,否则面对几十 GB 的代码量,很容易迷失方向。
今天,就带你手把手解析 AOSP 源码目录结构,搞清楚各个文件夹的作用,让你不再迷路!

AOSP 源码目录结构概览
Android 源码的目录结构大致如下:

|-- Makefile
|-- art
|-- bionic
|-- bootable
|-- build
|-- cts
|-- dalvik
|-- development
|-- external
|-- frameworks
|-- hardware
|-- out
|-- packages
|-- prebuilt
|-- sdk
|-- system
|-- vendor

每个文件夹的作用不同,接下来我们逐一解析。

1. 核心基础部分
bionic(Android C 标准库)
bionic 是 Android 自己实现的 C 运行库(类似于 glibc),用于适配 嵌入式环境。
它比标准的 glibc 更轻量,并经过优化以适应 低功耗设备。
适合深入学习的方向:如果你对 NDK 开发、系统底层优化 感兴趣,可以研究 bionic 代码。

bootable(引导启动相关)
bootable/recovery:包含 Android Recovery 模式 代码,比如 init.rc 恢复脚本、OTA 升级工具等。
bootable/bootloader:引导加载相关代码(但大多数厂商会使用自己的 Bootloader)。
适合深入学习的方向:如果你想研究 刷机、Recovery 定制,可以研究 bootable/recovery。

build(编译系统)
build/make:包含 Makefile 规则 和 Android.bp(蓝图文件)。
build/soong:soong 是 Android 新一代构建系统(替代 make)。
build/tools:一些构建 Android 时用到的 工具脚本。
适合深入学习的方向:
研究 如何裁剪 AOSP 体积
自定义 Android.mk / Android.bp 文件

cts(兼容性测试套件)
CTS(Compatibility Test Suite) 用于检测 厂商修改的 Android 版本是否符合 Google 兼容性标准。
适合深入学习的方向:如果你想做 设备适配 & Google 认证,一定要搞懂 CTS!

2. 核心系统代码
dalvik(早期的 Android 虚拟机)
dalvik 是 Android 4.4 以前 使用的 Java 虚拟机。
Android 5.0 之后,Google 改用了 ART(Android Runtime),所以 dalvik 现在已经不再被使用。
适合深入学习的方向:如果你想研究 ART 虚拟机、Java 执行环境,可以深入学习 art/ 目录。

frameworks(Android 核心框架层)
frameworks/base:Android Java API 实现层(AMS、WMS、各种 Service)。
frameworks/native:C++ 层的 系统服务(Binder、SurfaceFlinger)。
frameworks/av:多媒体相关代码(音视频、相机)。
frameworks/opt:Google 额外提供的 可选组件(如 Google 登录)。
适合深入学习的方向:
AMS(ActivityManagerService) 源码
WMS(WindowManagerService) 源码
Binder IPC 机制

hardware(HAL 层适配代码)
hardware/libhardware:HAL 适配层(适用于不同芯片厂商)。
hardware/interfaces:HIDL(Hardware Interface Definition Language)代码。
适合深入学习的方向:
想做 驱动适配 & 硬件抽象层开发 的工程师,需要研究 hardware/ 目录!

3. 应用 & UI 层
packages(系统应用 & UI 组件)
packages/apps:Android 系统应用,比如 设置(Settings)、相机(Camera)、联系人(Contacts) 等。
packages/providers:数据提供者,比如 日历、联系人、下载管理。
packages/inputmethods:输入法(如 拼音输入法)。
适合深入学习的方向:
研究 如何修改 Android 系统应用
定制 Settings / Launcher / SystemUI

system(系统底层代码)
system/core:Android 核心系统服务(如 init、logd、vold)。
system/netd:网络相关代码(WIFI / VPN)。
system/sepolicy:SELinux 权限管理。
适合深入学习的方向:
研究 Android 启动流程
学习 SELinux 权限策略

vendor(厂商定制代码)
厂商会在 vendor/ 目录 放入 自己的驱动、系统定制代码。
例如:小米的 vendor/xiaomi,华为的 vendor/huawei。
适合深入学习的方向:如果你要 适配 AOSP 到不同设备,必须研究 vendor/ 目录!

4. 开发者工具 & 预编译库
external(第三方开源组件)
存放 Android 依赖的开源项目,比如:
external/openssl(SSL 库)
external/libpng(PNG 图片解析)
external/sqlite(数据库)
适合深入学习的方向:如果你想优化 Android 网络、安全、数据库性能,可以深入研究 external/ 目录。

prebuilt(预编译工具 & 资源)
prebuilt/sdk:预编译的 SDK 工具。
prebuilt/x86 / prebuilt/arm:x86 和 ARM 设备的 预编译库。
适合深入学习的方向:如果你想裁剪 AOSP 体积,可以看看 prebuilt/ 里有哪些不需要的内容。

结论
如果你想深入研究 Android 系统开发,可以这样学习:
学习 frameworks/base/ 目录 → 熟悉 AMS/WMS 源码
研究 system/core/ 目录 → 理解 Android 启动流程
尝试修改 packages/apps/Settings → 定制你的系统应用
学习 hardware/libhardware/ → 了解 HAL 适配
研究 vendor/ 目录 → 适配不同手机
Android 源码目录 庞大但有逻辑,掌握它,你就能 真正入门 Android 系统开发!
如果你想系统学习 Android 开发,记得关注我的 AOSP 系统开发课程!

你可能感兴趣的:(android)