一、概述

Android 是由 Google 主导的基于 Linux 的开源移动操作系统,由 Open Handset Alliance (OHA) 于 2007 年发布。其设计围绕四大核心原则:

Android 采用分层架构,自底向上分为:Linux Kernel → HAL → Native Libraries & ART → Java API Framework → System Apps。每一层对上层提供清晰的 API,对下层屏蔽实现细节。

版本演进关键节点

版本代号API关键变化
1.0 (2008)—1首个商用版本,含 Dalvik 虚拟机
4.4 (2013)KitKat19ART 作为可选运行时,Project Svelte 内存优化
5.0 (2014)Lollipop21ART 取代 Dalvik、Material Design、64位支持
8.0 (2017)Oreo26Project Treble:框架与厂商实现解耦
10 (2019)—29Project Mainline:通过 Google Play 更新系统模块
12 (2021)—31Material You 动态配色,性能等级标准
14 (2023)—34更严格的后台限制,Health Connect
15 (2024)—3516KB 页大小支持,卫星连接

二、核心用例

从用户和开发者角度,Android 系统主要提供以下核心功能。

Android Use Case Diagram
图 1:Android 系统核心用例图

Demo:通过 Intent 打开相机

// Kotlin: 启动系统相机拍照
val takePicture = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePicture.resolveActivity(packageManager) != null) {
    startActivityForResult(takePicture, REQUEST_IMAGE_CAPTURE)
}

// 接收结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        val imageBitmap = data?.extras?.get("data") as Bitmap
        imageView.setImageBitmap(imageBitmap)
    }
}

三、系统启动流程

Android 设备上电到显示桌面(Launcher),经过如下阶段:

阶段组件职责
1. Boot ROM芯片固件上电重置,加载 Bootloader 到 RAM
2. BootloaderLK / U-Boot初始化 RAM、存储、显示,加载 Linux Kernel
3. Linux Kernel内核 + 驱动挂载根文件系统,启动 init 进程(PID 1)
4. init 进程init + rc 脚本挂载分区,启动守护进程(servicemanager、vold 等)
5. Zygoteapp_process预加载 Framework 类 + 资源,孵化新应用进程
6. SystemServersystem_server启动所有系统服务(AMS、WMS、PKMS 等)
7. LauncherLauncher3显示桌面,完成启动
Android Boot Sequence
图 2:Android 系统启动活动图

四、App 启动流程

用户点击桌面图标到 Activity 显示,完整调用链如下。

App Launch Sequence
图 3:App 启动时序图

五、Activity 生命周期

Activity 是 Android 应用最基本的表现组件。系统通过回调方法管理其从创建到销毁的完整生命周期,并在配置变化或内存紧张时重建。

Activity Lifecycle State Machine
图 4:Activity 生命周期状态机

Demo:生命周期回调

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d(TAG, "onCreate")
    }
    override fun onStart() { super.onStart(); Log.d(TAG, "onStart") }
    override fun onResume() { super.onResume(); Log.d(TAG, "onResume") }
    override fun onPause() { super.onPause(); Log.d(TAG, "onPause") }
    override fun onStop() { super.onStop(); Log.d(TAG, "onStop") }
    override fun onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy") }
    override fun onRestart() { super.onRestart(); Log.d(TAG, "onRestart") }
}

六、系统分层架构

Android 采用经典的 5 层架构,自下而上为:

Android Architecture Layers
图 5:Android 系统分层架构图

各层详细说明

层组成职责
Linux Kernel Linux 内核(Android Common Kernel)+ 驱动 + Binder / ashmem / lowmemorykiller 等 Android 定制 硬件抽象、进程管理、内存管理、安全(SELinux)、网络
HAL 硬件抽象层(HIDL/AIDL 定义),各厂商 .so 实现 为 Framework 提供统一硬件访问接口,隔离厂商差异
Native Libraries & ART libc(Bionic)、SQLite、OpenGL ES、WebKit(Chromium)、Media Framework;ART 虚拟机 提供 C/C++ 底层能力;编译并执行 DEX 字节码
Java API Framework ActivityManager、WindowManager、PackageManager、ContentProvider 等系统服务 暴露 Java/Kotlin API 供应用调用
System Apps Launcher、Phone、Contacts、Settings 等 用户可见的系统级应用

七、Binder IPC 机制

Binder 是 Android 独有的进程间通信 (IPC) 机制,基于 OpenBinder 项目(Be Inc. 遗产)。它是整个 Framework 的通信总线:系统服务通过 Binder 向 App 暴露功能,App 间也可通过 Binder 通信。

Binder IPC Architecture
图 6:Binder IPC 架构图(组件图)
Binder 关键对象:Binder Driver(内核驱动 /dev/binder,负责数据搬运,单次最大 1MB - 8KB 缓冲区开销)、ServiceManager(充当 DNS 角色,服务名为键)、Binder Proxy / Stub(Java/Kotlin 代理模式实现)。Binder 线程池上限 16 个,独立于应用主线程。

Demo:AIDL 定义远程服务

// IMusicPlayer.aidl
interface IMusicPlayer {
    void play(String uri);
    void pause();
    boolean isPlaying();
}

// 服务端实现
class MusicService : Service() {
    private val binder = object : IMusicPlayer.Stub() {
        override fun play(uri: String?) { /* 播放逻辑 */ }
        override fun pause() { /* 暂停逻辑 */ }
        override fun isPlaying(): Boolean = mediaPlayer.isPlaying
    }
    override fun onBind(intent: Intent?) = binder
}

// 客户端绑定
bindService(Intent(this, MusicService::class.java), serviceConnection, BIND_AUTO_CREATE)
val player = IMusicPlayer.Stub.asInterface(serviceConnection.service)

Binder vs 其他 IPC 对比

特性BinderSocket共享内存
数据拷贝次数1 次2 次0 次
调用方式同步 RPC流式需额外同步
安全性UID/PID 可信校验无内置身份无内置身份
Android 主要用途系统服务 / 应用间 RPCZygote / adbd / 网络图形缓冲区 / ashmem

八、Android Runtime (ART)

ART 在 Android 5.0 中取代了 Dalvik 虚拟机,从 JIT (Just-In-Time) 转向 AOT (Ahead-Of-Time) 编译。Android 7.0 引入混合编译(Profile-guided JIT + AOT),平衡安装速度和运行时性能。

ART Compilation Pipeline
图 7:ART 编译流水线(状态机 + 活动图)
混合编译流程:
  1. 安装时仅做轻量 verify(验证字节码合法性)
  2. 首次运行时通过 JIT 解释 + 热点编译
  3. 空闲时 dex2oat 根据 Profile 对热点代码做 AOT 编译为 .odex
  4. 重启后优先加载 AOT 编译的机器码,未编译代码继续解释执行

ART vs Dalvik 对比

特性DalvikART
编译方式JIT(运行时逐条编译)AOT + JIT 混合
安装时间快较快(仅 verify)
启动速度慢(冷启动需 JIT)快(有 AOT 缓存时)
运行时性能较低较高
内存占用较小较大(含 AOT 代码)
GCSTW(暂停所有线程)并发压缩 GC

九、HAL 硬件抽象层

HAL 将硬件功能封装为标准接口,Framework 层通过 HAL 接口调用硬件而不需要关心厂商的实现差异。Android 8.0 引入 HIDL (HAL Interface Definition Language),Android 11+ 迁移至 AIDL。

HAL Architecture
图 8:HAL 架构图(包图)

9.1 Project Treble(框架/厂商解耦)

Android 8.0 引入 Project Treble,将厂商实现(Vendor Implementation)与 Android 框架分离:


十、Framework 核心类

Android Framework 以系统服务为核心,最常见的 8 大核心服务:

Framework Core Classes
图 9:Framework 核心类图

这些服务运行在 system_server 进程内,通过 Binder 向 App 进程暴露功能。每个服务都以 Manager 类的形式封装对外 API:

Manager 类 (App 侧)对应系统服务关键功能
ActivityManagerAMS (ActivityManagerService)Activity/Service/BroadcastReceiver/Provider 生命周期管理
WindowManagerWMS (WindowManagerService)窗口显示、层级(Z-Order)、输入事件分发
PackageManagerPKMS (PackageManagerService)APK 安装、权限管理、组件查询
NotificationManagerNotificationManagerService通知栏管理
LocationManagerLocationManagerServiceGPS/网络定位
ConnectivityManagerConnectivityService网络/WiFi/蓝牙连接管理
SensorManagerSensorService加速度计、陀螺仪等传感器
AlarmManagerAlarmManagerService定时任务、闹钟

Demo:获取系统服务

// Kotlin: 通过 Context 获取系统服务
val am = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val memInfo = ActivityManager.MemoryInfo()
am.getMemoryInfo(memInfo)
Log.d(TAG, "Available Memory: ${memInfo.availMem / 1024 / 1024} MB")

val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val display = wm.defaultDisplay
val metrics = DisplayMetrics()
display.getRealMetrics(metrics)
Log.d(TAG, "Screen: ${metrics.widthPixels}x${metrics.heightPixels} @ ${metrics.densityDpi}dpi")

十一、包图:源码结构

AOSP 源码主要包的依赖关系:

AOSP Source Package Diagram
图 10:AOSP 源码包图(主要目录 + 依赖关系)

AOSP 关键源码目录

目录内容Git 仓库
frameworks/base/核心 Framework(AMS、WMS、PKMS 等)platform/frameworks/base
packages/apps/系统应用(Launcher3、Settings 等)platform/packages/apps/*
art/ART 运行时platform/art
system/core/init、logcat、adbd、servicemanagerplatform/system/core
hardware/interfaces/HIDL/AIDL HAL 接口定义platform/hardware/interfaces
bionic/Android C 库(替代 glibc)platform/bionic
external/第三方库(SQLite、libjpeg 等)platform/external/*
build/Soong 构建系统(Blueprints + Go)platform/build

十二、安全模型

Android 安全基于纵深防御原则,多层防护互相叠加。

Android Security Model
图 11:Android 安全纵深防御模型(部署图视角)
层级机制说明
应用沙箱Linux UID 隔离每个 App 分配独立 UID,文件系统权限隔离;默认无法读取其他 App 的私有数据
权限系统AndroidManifest.xml 声明危险权限(相机、位置等)需运行时动态申请 + 用户授权;Android 11+ 支持一次性权限和自动重置
SELinux强制访问控制 (MAC)所有进程(含 root)均受 SELinux 策略约束,默认 Deny All;Android 4.3 引入,5.0 强制 Enforcing
Verified Bootdm-verity / AVB启动时逐块校验系统分区的完整性,防篡改
应用签名APK 签名 (v1/v2/v3/v4)安装时校验签名;同签名 App 可共享 UID 和数据
ASLR + PIE + NX内核安全特性地址随机化、位置无关代码、栈不可执行,防御内存漏洞利用
File-based EncryptionFBE (Direct Boot)单个文件级别加密,比全盘加密 (FDE) 更灵活

十三、总结

Android 通过分层架构(Kernel → HAL → Native → Framework → App)实现了硬件无关性与开发便捷性的平衡。其设计有三个关键特点:

从 Project Treble 的框架/厂商解耦到 Project Mainline 的模块化更新,从 Dalvik JIT 到 ART 混合编译,Android 持续演进其架构以适应多样化设备(手机、平板、手表、车机、TV、IoT)。