Frameworks学习预览
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/"这个路线就够了。
