news 2026/4/30 13:54:27

Frameworks学习预览

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 最可能碰到的目录

按概率排:

  1. hardware/— HAL 层,显示、音频、相机硬件抽象(你可能已经碰了)
  2. frameworks/native/services/surfaceflinger/— 画面合成显示(SurfaceFlinger)
  3. frameworks/base/services/core/java/com/android/server/display/— 显示管理服务
  4. frameworks/base/core/java/android/view/— 窗口/显示相关
  5. 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/"这个路线就够了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:53:49

AI辅助测试的现状与未来:工具还是替代?

十字路口的测试变革当前软件测试行业正经历人工智能技术带来的深度重构。随着大语言模型、多模态感知、智能体协同等技术的突破性进展,AI辅助测试已从实验室概念演进为工程实践的核心工具。面对这场变革,测试从业者亟需厘清核心问题:AI究竟是…

作者头像 李华
网站建设 2026/4/30 13:52:22

Windows Cleaner终极指南:3个简单步骤让卡顿电脑重获新生!

Windows Cleaner终极指南:3个简单步骤让卡顿电脑重获新生! 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为电脑C盘爆红而烦恼吗&…

作者头像 李华
网站建设 2026/4/30 13:51:20

使用OpenClaw框架时快速接入Taotoken作为模型供应商的指南

使用OpenClaw框架时快速接入Taotoken作为模型供应商的指南 1. 准备工作 在开始配置之前,请确保已安装OpenClaw框架并具备基本的开发环境。您需要从Taotoken平台获取有效的API Key,并在模型广场确认要使用的模型ID。登录Taotoken控制台后,可…

作者头像 李华