当前位置: 首页 > news >正文

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/"这个路线就够了。

http://www.jsqmd.com/news/725555/

相关文章:

  • UnityExplorer终极指南:如何在游戏运行时实时调试和修改Unity项目
  • 在线抠图软件有哪些?2026年最实用的工具推荐指南
  • 别再手动改编号了!用Word交叉引用+Zotero插件,搞定毕业论文格式的完整流程
  • 如何在Windows上快速安装苹果设备驱动:告别iTunes臃肿的终极指南
  • Java 条件语句
  • 使用TaotokenCLI工具一键配置团队开发环境与API密钥
  • WarcraftHelper:魔兽争霸3终极优化指南,解锁300帧率与宽屏支持
  • 如何在 MySQL 中正确存储日期时间以支持灵活的时间范围查询
  • TouchGal完整指南:一站式Galgame社区的终极解决方案
  • 5分钟掌握R3nzSkin国服特供版:英雄联盟零风险换肤神器完全指南
  • 从‘奇数单增序列’出发,聊聊编程中数据过滤与排序的几种常见思路(附Python/Java实现)
  • 5分钟掌握Pearcleaner:macOS应用彻底清理的终极解决方案
  • 魔兽争霸3兼容性修复完全指南:让经典游戏在现代电脑上流畅运行
  • 别再被container_linux.go:349搞懵了!Docker容器启动失败的3个真实排查场景与修复实录
  • C# WinForm串口调试助手实战:手把手教你用SerialPort类搞定RS485/232通信
  • AI抠图在线工具有哪些?2026年最实用的免费抠图工具推荐
  • 如何在Windows系统上构建企业级虚拟摄像头解决方案:OBS-VirtualCam技术深度解析
  • AzurLaneAutoScript:碧蓝航线全自动脚本终极指南,解放双手轻松游戏
  • WindowResizer:突破Windows窗口限制,3分钟掌握强制调整窗口大小技巧
  • 告别轮询!用STM32的EXTI和HAL库回调函数,优雅地处理你的按键与传感器信号
  • 【西瓜带你学Kafka | 第三期】Kafka从消息生产到集群管理的完整链路(文含图解)
  • 企业 AI 生成 PPT API哪家好?AiPPT.cn成熟接口一键接入,大厂都在用
  • Ubuntu 20.04上D435i驱动安装踩坑实录:从SDK2.0到ROS包,我遇到的5个问题及解法
  • 手机号逆向查询QQ号:3步极速查询完整教程
  • 别再只会用jstack了!用Arthas的dashboard和thread命令,5分钟定位线上Java线程问题
  • 3分钟快速上手:Windows电脑安装安卓应用的终极解决方案
  • 手把手教你用AD9361+Zynq FPGA实现2ASK无线收发(附MATLAB与HLS代码)
  • 抖音批量下载器:如何用开源工具解决内容收集的三大痛点
  • 告别“人工内耗”!十克助教手把手教你,让教培机构运营效率翻倍
  • 2025最权威的六大AI学术神器实测分析