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

Android随笔-平台架构

Android 系统架构采用分层设计,从上到下大致分为五层。

一、总体架构图

┌─────────────────────────────────────────────────────────────┐ │ 第 5 层:应用层 (Applications) │ │ System UI、Launcher、Settings、微信、抖音... │ │ (Java/Kotlin 代码,SDK API) │ ├─────────────────────────────────────────────────────────────┤ │ 第 4 层:应用框架层 (Application Framework) │ │ ActivityManagerService、WindowManagerService、 │ │ PackageManagerService、ContentProvider、ResourceManager... │ │ (Java 代码,system_server 进程) │ ├─────────────────────────────────────────────────────────────┤ │ 第 3 层:系统运行库层 (Native Libraries & Android Runtime) │ │ SurfaceFlinger、OpenGL ES、SQLite、WebView、Media Codec、 │ │ ART 虚拟机、libc、Binder IPC 库... │ │ (C/C++ 代码,.so 共享库) │ ├─────────────────────────────────────────────────────────────┤ │ 第 2 层:硬件抽象层 (HAL - Hardware Abstraction Layer) │ │ Camera HAL、Audio HAL、Sensors HAL、GPS HAL、Wi-Fi HAL... │ │ (C/C++ 接口,由厂商实现) │ ├─────────────────────────────────────────────────────────────┤ │ 第 1 层:Linux 内核层 (Linux Kernel) │ │ 进程调度、内存管理、网络协议栈、电源管理、 │ │ Binder 驱动、显示驱动、输入子系统、Camera 驱动... │ │ (C 代码,内核态) │ └─────────────────────────────────────────────────────────────┘

二、逐层详解

第 1 层:Linux 内核层

这是 Android 的地基,负责硬件资源管理和进程隔离

模块说明
进程管理调度 CPU 时间片,管理进程生命周期(fork、kill、信号)
内存管理虚拟内存、OOM 机制、Ashmem(匿名共享内存)
Binder 驱动你之前问的 Binder IPC 机制的核心。内核态的 Binder 驱动负责跨进程通信的数据拷贝和线程调度
显示驱动Framebuffer、DRM/KMS,最终把图像数据送到屏幕
输入子系统管理触摸屏、按键的底层事件(/dev/input/event*
网络协议栈TCP/IP、Wi-Fi 驱动、蓝牙协议栈

关联知识:Zygote 进程通过 fork() 系统调用(内核提供)孵化应用进程;Binder 驱动是 Framework 层所有 IPC 的根基。

第 2 层:硬件抽象层(HAL)

Android 不想把硬件访问代码直接塞进内核(避免 GPL 传染、方便厂商闭源),所以在内核之上加了一层标准化接口

应用 → Framework → HAL 接口定义(AIDL/HIDL)→ 厂商 HAL 实现 → 内核驱动 → 硬件
类型说明
Legacy HAL早期以共享库(.so)形式存在,由 Framework 直接 dlopen
HIDL HALAndroid 8.0 引入,通过 Binder IPC 调用,支持独立更新
AIDL HALAndroid 11 起逐步替代 HIDL,统一用 AIDL

例子:Camera 拍照流程

Camera App → CameraManager (Framework) → CameraService (Native) → Camera HAL (厂商实现,如 Qualcomm CAMX) → Camera 驱动 → 硬件传感器

第 3 层:系统运行库层

这一层是 Native 世界,包含两部分:

A. Android Runtime(ART)
特性说明
AOT 编译安装时把字节码编译成机器码(.oat/.vdex),运行时直接执行
GC并发标记清除(Concurrent Copying GC),减少卡顿
JIT 回退Android 7+ 混合模式,热代码 JIT 编译,冷代码 AOT
Profile-S Guided根据用户使用习惯优化编译

Kotlin/Java 代码最终在这里被 ART 翻译成 CPU 指令。

B. Native Libraries
用途
SurfaceFlinger你之前问过的,负责合成所有 Layer 的图像,送显
OpenGL ES / Vulkan图形渲染,Skia、HWUI 都依赖它
WebView / Chromium网页渲染引擎
MediaCodec音视频硬解码,通过 OMX/Codec2 调用 HAL
SQLite本地数据库
Binder IPC 库(libbinder)Framework 的Binder.java底层就是调这个
第 4 层:应用框架层(Application Framework)

SystemServer 所在的位置。

服务/组件职责对应进程
ActivityManagerService (AMS)管理 Activity 生命周期、进程调度、任务栈system_server
WindowManagerService (WMS)管理窗口层级、Surface 分配、输入事件分发system_server
PackageManagerService (PMS)APK 安装/卸载/权限管理、组件解析system_server
ContentProvider跨进程数据共享各应用进程 / system_server
View System / ResourceManagerUI 测量布局绘制、资源加载应用进程
NotificationManager通知栏管理system_server
LocationManagerGPS/网络定位system_server

关键机制:

  • SystemServer 启动后,在这里注册各种 Service。
  • 应用通过 Context.getSystemService() 获取 Binder Proxy,与 system_server 里的 Binder Stub 通信。
  • Activity 启动流程,就是应用进程↔ AMS ↔ WMS 在这一层的协作。

第 5 层:应用层

最上层,直接面向用户。

类型例子
系统应用Phone、Contacts、Settings、Launcher、SystemUI
第三方应用微信、抖音、你的 App

每个应用运行在独立的沙箱进程中,拥有独立的 UID 和虚拟机实例。应用之间默认不能互相访问内存,必须通过 Framework 提供的 IPC 机制通信。

三、层与层之间如何通信

1. 应用层 ↔ Framework 层

// 你写的代码valam=getSystemService(Context.ACTIVITY_SERVICE)asActivityManager

底层通过 Binder IPC 调用 system_server 里的 AMS。

2. Framework 层 ↔ Native 层

Framework 的 Java 代码通过 JNI(Java Native Interface) 调用 C/C++ 库。

// Surface.javaprivatenativelongnativeCreateFromSurfaceTexture(...);

3. Native 层 ↔ HAL 层

通过 HIDL/AIDL 接口 或直接的函数调用(Legacy HAL)。

4. HAL 层 ↔ 内核层

标准的 Linux 系统调用、ioctl、读写设备节点(/dev/xxx)。

四、AOSP 源码目录对应

层级AOSP 路径
应用层packages/apps/
Frameworkframeworks/base/(AMS、WMS、PMS 在这里)
Native 库frameworks/native/(SurfaceFlinger、Input)
HALhardware/interfaces/(HIDL/AIDL 定义)
内核kernel/common/(Binder 驱动、各子系统)
ARTart/
Bionic libcbionic/

五、总结

内核层管硬件和进程,HAL 层隔离厂商实现,Native 层做图形/媒体/虚拟机,Framework 层管应用生命周期和系统服务,应用层写业务逻辑。
层与层之间靠 Binder IPC(跨进程)、JNI(跨语言)、HAL 接口(跨硬件)粘合。

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

相关文章:

  • DP83848-HT以太网PHY寄存器配置实战:从自动协商到中断与节能管理
  • 《地狱之门:东线》发电机行动:撤退战术与资源管理实战解析
  • MacBook 背光电路故障诊断与保险丝/背光IC 芯片级修复
  • C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
  • 用LangChain 0.3构建生产级RAG与Agent:从API集成到Streamlit部署
  • 5分钟完成STL转STEP:免费开源的3D格式转换终极方案
  • 域名成本真相与SEO价值:技术视角下的域名定价逻辑
  • oracle、sqlserver、postgresql、mysql 批量kill会话脚本汇总
  • Jellium Desktop音频均衡器教程:创建专业音效配置
  • TkinterMapView性能优化:瓦片缓存机制与预加载策略提升地图流畅度
  • 2026 年至今,福田知名的自助洗车全国招加盟供应厂家找哪家,颠覆传统洗车业,这才是赚钱的秘密!-斑马智联洗车 - 行业严选官
  • 武汉高中学费太贵怎么办?武汉思久高级中学奖学金助学政策减轻家庭负担 - 湖北升学规划
  • 2026北京管道清洗公司推荐:自来水管网清洗,自来水管线清洗,供水管道清洗,供水管网清洗、供水管网清理,供水管网带压检测,供水管道带水检测,热水管道带压检测优质企业TOP5+避坑指南 - 海棠依旧大
  • 2026 年 7 月新发布:纳溪比较好的镀金镀银电子料回收厂家推荐几家,别再扔了!这批电子料的隐藏价值有多大?-昝氏设备回收 - 行业推荐【认证官】
  • 计算机Django毕设实战-基于 Python Web 的餐饮订单与菜品管理系统 智慧餐饮个性化服务管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Python毕设选题推荐:轻量化 Python 可视化技能学习实训平台 面向教学的数据可视化学习演示系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 四大操作系统深度对比:Windows、macOS、Linux与鸿蒙的核心差异与跨平台协作指南
  • Unity Resources加载性能瓶颈深度解析与优化实战指南
  • LavaMusic多语言支持配置:轻松实现24种语言的Discord音乐体验
  • 探索Nota语法:编写结构化文档的终极语法参考
  • 宠物行业女生创业优势大 科谷技校全套门店运营创业课程 - 湖北找学校
  • 复建训练
  • 武汉中考落榜生有普高读吗?武汉思久高级中学正规普高学籍可参加高考 - 湖北找学校
  • 伊犁防水修缮全指南:伊犁河谷湿润大陆性气候下的渗漏根治方案 - 资讯快报
  • AR3D-R1:强化学习驱动的文本到3D生成技术解析
  • 零基础开发者如何用Codex快速实现自动化脚本编写
  • 外贸提成按毛利还是按成交额?林芳老师说选错提成方式团队全废 - 外贸圈集团
  • 2026西安装修公司TOP10榜单|含明细报价、真实口碑与避坑攻略 - 资讯速览
  • 如何定制Type Theme:从配置到样式的完整指南,打造专属博客风格
  • BetterNCM安装器:3分钟为网易云音乐解锁无限插件功能