frameworks/base/ 详细展开
frameworks/base/
├── core/java/android/
├── services/core/java/com/android/server/
├── graphics/java/android/graphics/
├── media/java/android/media/
├── telephony/java/android/telephony/
├── location/java/android/location/
└── ...
核心就两大块:给 App 用的 API(core) 和 系统后台服务(services)。
一、core/java/android/ --- App 能调到的 API 都在这里
core/java/android/
├── app/
│ ├── Activity.java ← 你写的每个 Activity 都继承它
│ ├── Service.java ← 后台服务基类
│ ├── Application.java ← 整个 App 的入口
│ ├── Fragment.java ← Fragment 管理
│ ├── AlertDialog.java ← 弹窗
│ ├── Notification.java ← 通知
│ ├── WallpaperManager.java
│ ├── AlarmManager.java ← 闹钟
│ ├── SearchManager.java
│ └── ...
│
├── content/
│ ├── Context.java ← 最基础的通行证(抽象类)
│ ├── ContextWrapper.java ← 装饰器
│ ├── Intent.java ← 启动组件、传数据
│ ├── ContentProvider.java ← 跨进程数据共享
│ ├── ContentResolver.java ← 查 ContentProvider 的入口
│ ├── SharedPreferences.java ← 轻量存储
│ └── ...
│
├── view/
│ ├── View.java ← 所有 UI 控件的爹
│ ├── ViewGroup.java ← 能装子 View 的容器
│ ├── TextView.java ← 文字
│ ├── Button.java ← 按钮
│ ├── ImageView.java ← 图片
│ ├── Window.java ← 窗口抽象
│ ├── ContextThemeWrapper.java← 让 Context 有主题
│ └── ...
│
├── widget/
│ ├── ListView.java
│ ├── RecyclerView.java
│ ├── ProgressBar.java
│ └── ...
│
├── graphics/
│ ├── Canvas.java ← 画图
│ ├── Paint.java ← 画笔
│ ├── Bitmap.java ← 位图
│ ├── SurfaceFlinger 相关 ← 合成显示
│ └── ...
│
├── media/
│ ├── MediaPlayer.java ← 播放音视频
│ ├── AudioManager.java ← 音频管理
│ ├── Camera.java ← 相机
│ └── ...
│
├── os/
│ ├── Handler.java ← 线程通信(主线程发消息)
│ ├── Looper.java ← 消息循环
│ ├── Process.java ← 进程管理
│ ├── BatteryManager.java ← 电池
│ └── ...
│
├── net/
│ ├── ConnectivityManager.java ← 网络连接管理
│ ├── wifi/ ← WiFi 相关
│ └── ...
│
├── provider/
│ ├── Settings.java ← 系统设置
│ └── ...
│
├── telephony/
│ ├── TelephonyManager.java ← 打电话、读 IMEI
│ └── ...
│
├── location/
│ ├── LocationManager.java ← GPS
│ └── ...
│
└── hardware/
├── Camera.java
├── SensorManager.java ← 传感器
├── display/
│ └── DisplayManager.java ← 显示管理(你可能会碰这个)
└── ...
以上这些都是给 App 调用的 API 定义。 它们大多数是接口或抽象类,真正干活的是 ContextImpl 和系统服务。
以上这些都是给 App 调用的 API 定义。 它们大多数是接口或抽象类,真正干活的是 ContextImpl 和系统服务。
二、services/core/java/ --- 后台真正干活的进程
services/core/java/com/android/server/
├── am/
│ ├── ActivityManagerService.java ← Activity 生命周期真正的管理者
│ │ Activity 进程被杀?AMS 管的。
│ │ startActivity() 最终调到这里。
│ │ 所有 App 的 Activity 栈它都记着。
│ └── ...
│
├── wm/
│ ├── WindowManagerService.java ← 窗口位置、大小、层级
│ │ 你 setContentView() 最终到这里。
│ │ 多窗口、分屏、画中画都归它管。
│ └── ...
│
├── pm/
│ ├── PackageManagerService.java ← 安装/卸载/查询 App
│ │ 你点安装 APK,PMS 解压、解析 AndroidManifest、
│ │ 分配 uid、建立 dex 缓存。
│ └── ...
│
├── power/
│ ├── PowerManagerService.java ← 亮屏灭屏、休眠
│ └── ...
│
├── display/
│ ├── DisplayManagerService.java ← 显示设备管理
│ │ (你调 HDMI 输出,这里也会涉及到)
│ └── ...
│
├── input/
│ ├── InputManagerService.java ← 触摸、按键分发
│ └── ...
│
├── audio/
│ ├── AudioService.java ← 音量、音频焦点
│ └── ...
│
├── usb/
│ ├── UsbService.java ← USB 插拔
│ └── ...
│
└── ...
这些 Service 跑在 system_server 进程里 ,你的 App 在另一个进程。它们通过 Binder IPC 通信。
三、两个层是怎么配合的
拿 startActivity() 举例,全链路:
你的 App 进程 system_server 进程
┌─────────────┐ ┌──────────────────┐
│ MainActivity│ │ AMS │
│ .onClick()│ │ │
│ ↓ │ │ │
│ startActivity│ ──Binder IPC──→ │ 检查权限 │
│ (Intent) │ │ 找目标 Activity │
│ ↓ │ │ 新进程/新线程 │
│ Activity │ ←──Binder IPC── │ onPause() 旧 │
│ .onPause() │ │ onResume() 新 │
│ ↓ │ │ │
│ Activity │ │ │
│ .onResume() │ │ │
└─────────────┘ └──────────────────┘
↓
View.java / WindowManagerService 负责画界面
四、你做 RK3576 BSP 最可能碰到的目录
按概率排:
hardware/--- HAL 层,显示、音频、相机硬件抽象(你可能已经碰了)frameworks/native/services/surfaceflinger/--- 画面合成显示(SurfaceFlinger)frameworks/base/services/core/java/com/android/server/display/--- 显示管理服务frameworks/base/core/java/android/view/--- 窗口/显示相关frameworks/base/core/java/android/app/--- 如果想在 Framework 层加接口给 App 调
一句话路线图
你写的 App → 只碰 core/java/android/app/
你加 Framework API → 在 core/ 里加接口,在 services/ 里加实现
你调显示/HDMI → services/display + SurfaceFlinger + HAL
你改系统行为 → services/am/ 或 services/wm/
每个目录不需要背,用到再去翻 。但你知道"显示相关的在 services/display/,窗口在 services/wm/,生命周期在 services/am/"这个路线就够了。