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

AOSP 本质解析:为什么 Android 是编译期 + 运行时的混合系统(系统篇)

一、从一个现象开始

很多人第一次接触 AOSP,会有一个直观感受:

编译一次 AOSP,要几十分钟甚至几个小时

👉 于是很自然会产生一个疑问:

AOSP 是不是一个“纯编译期系统”?

👉 但当你真正跑起来 Android 系统,又会发现:

  • 有 ART 虚拟机
  • 有 Binder 跨进程
  • 有 system_server
  • 有各种动态调度

👉 这又明显是:

一个“运行时系统”

二、核心结论(先给答案)

AOSP 不是纯编译期系统,也不是纯运行时系统 👉 而是一个: 编译期(Build) + 运行时(Runtime) 的混合架构

三、AOSP 的两大体系


1️⃣ 编译期体系(Build System)

👉 你在编译 AOSP 时,本质在做:

把“源码 → 操作系统镜像”

编译流程(简化版)

C/C++ → Clang → .so Java → javac → .class → dex ↓ framework.jar / services.jar ↓ system.img / vendor.img / boot.img

👉这一部分完全属于:

编译期(compile time)

编译期做了什么?

  • 代码结构确定
  • 函数符号确定
  • 类结构生成
  • 部分优化(AOT)
  • 系统打包

👉 一句话:

把系统“提前构建好”

2️⃣ 运行时体系(Runtime System)

当设备启动之后:

Android 系统才真正开始运行

启动流程(简化版)

init ↓ Zygote ↓ system_server ↓ AMS / PMS / WMS ↓ App 运行

👉 ✔️ 这一部分属于:

运行时(runtime)

运行时在做什么?

  • ART 执行 dex
  • Binder 跨进程通信
  • 系统服务调度
  • 资源管理
  • 生命周期管理

👉 一句话:

系统在“动态运行”

四、关键:AOSP 为什么要混合?


👉 回到我们第2篇的核心:

编译期 = 性能 运行时 = 灵活

👉 Android 的需求是:

既要性能,又要灵活

如果全部编译期(像 C)

  • App 无法动态加载
  • 系统不灵活
  • 无法支持复杂生态

如果全部运行时(像纯 JVM)

  • 性能差
  • 启动慢
  • 资源消耗大

👉 所以 Android 选择:

👉 两者结合

五、最关键机制:ART(核心)


ART 做了什么?

dex → oat(机器码)

👉 方式:

安装时:AOT(提前编译) 运行时:JIT(动态优化)

👉 ✔️ 本质:

把 JVM 的运行时行为,部分提前到编译期

六、Framework 的本质(系统层理解)

上一篇我们讲过:

Android Framework = API + Binder + 系统服务

👉 在 AOSP 里:

Framework = 运行在 ART 上的“系统级代码”

👉 举个例子:

Activity.startActivity() ↓ Framework API ↓ Binder ↓ system_server(AMS)

👉 ✔️ 这是:

运行时行为(跨进程)

七、AOSP 的终极模型

编译期(Build) ↓ system.img(系统镜像) ↓ ───────────── ↓ 运行时(Runtime) ↓ ART + Binder + Framework ↓ App 执行

八、再回到最初的问题

为什么 AOSP 编译这么慢?

因为它不是在编一个程序 👉 而是在“构建一个操作系统”

👉 包括:

  • Native 层(C/C++)
  • Java Framework
  • 系统服务
  • 系统镜像

👉 ✔️ 本质:

把大量运行时工作提前做掉

九、终极总结(建议记住)

AOSP 的本质: 编译期:构建系统 运行时:运行系统 GCC:纯编译期 JVM:偏运行时 Android:两者融合

十、整个系列的核心串起来

第1篇:C++ 为什么改函数名(编译期行为)
第2篇:编译期 vs 运行时(认知模型)
第3篇:AOSP(混合系统)(本篇)


👉 下一篇(总纲):

编译期 vs 运行时:一切技术设计的底层逻辑(总纲)


总结

很多人学 AOSP,会陷入细节:

  • Binder
  • HAL
  • Framework
  • Native

👉 但如果你没有这个认知:

👉 编译期 vs 运行时

👉 就很难真正理解系统的本质。


👉 一旦你理解了:

👉 Android = 编译期 + 运行时的平衡设计

👉 你会发现:

系统,其实并没有那么复杂

http://www.cnnetsun.cn/news/2159066.html

相关文章:

  • 如何快速掌握B站视频下载:DownKyi完整配置使用指南
  • 中专学历,276人团队,年出货过亿颗芯片——这个南京老哥把CH340做成了全球嵌入式圈的“基础设施“
  • DS2API:Go语言实现的DeepSeek API代理,兼容OpenAI/Claude/Gemini协议
  • 八大网盘直链下载助手终极指南:一键获取真实地址告别限速烦恼
  • 【R核心开发组内部验证版】:R 4.5.0–4.5.2三阶段benchmark对比,这3项配置不改,并行效率永远卡在62%以下
  • AHB总线时序设计与多主设备仲裁机制详解
  • 二手极路由4刷OpenWrt变身‘超级无线网卡’:防ARP攻击+稳定获取IPv6全流程
  • 多GPU分布式SFT训练实战:Qwen2-7B调优指南
  • 部署与可视化系统:避坑指南:海思 NPU (Hi3516/Hi3559) 部署 YOLO 模型的 Ruyistudio 转换踩坑与量化掉点排查
  • HSPICE网表文件(.sp)的“潜规则”与高效编写技巧:从注释到续行的冷知识
  • DualPath技术:优化LLM推理中的KV缓存内存管理
  • BK3633开发效率翻倍:在Keil MDK中配置一键生成带版本号的Debug/Release固件
  • 别再手动算坐标了!用C++/Qt手搓一个WGS-84经纬度与ECEF直角坐标互转的轻量库
  • Inno Setup实战:为你的Unity游戏制作首个安装程序,从下载软件到生成安装包全流程
  • SDX62平台编译Lighttpd时,Bitbake反复提示‘Reconnecting to server’怎么办?
  • 从URDF到Rviz:手把手教你用joint/robot_state_publisher让机器人模型动起来
  • TensorRT模型转换踩坑实录:C++ API部署ONNX模型时常见的5个错误及解决方法
  • 3分钟掌握Layerdivider:将单张图片智能转换为PSD分层文件的终极指南
  • KMS智能激活工具:告别Windows和Office激活烦恼的终极方案
  • 5分钟上手MediaCrawler:零代码实现五大平台数据采集的终极指南
  • 在Mac上玩转iOS游戏:PlayCover按键映射完全指南
  • 如何在OBS Studio中快速搭建RTSP服务器:完整实战指南
  • 基于PLC的小型自动化分生产线控制系统设计(开题报告)
  • RH850 P1X芯片Flash配置避坑指南:从Option Bytes到安全启动的实战解析
  • 别再乱填了!手把手教你配置ZYNQ MPSOC的DDR参数(附tCL、tRCD等时序详解)
  • 别再为QAC的9级错误抓狂了!手把手教你搞定头文件路径和宏定义配置(附常见错误排查清单)
  • 终极指南:5分钟掌握JetBrains IDE试用期无限重置的完整解决方案
  • 别再只开3389了!远程桌面端口转发安全配置与避坑指南(附防火墙规则)
  • 航模新手必看:5分钟搞懂机翼升力原理(附伯努利定理图解)
  • BOTW存档编辑器GUI:5分钟快速上手的Switch游戏修改终极指南