2. AOSP概述

Android Open Source Project(AOSP)是Google主导维护的Android平台开源基线。它并不是一个可以直接刷入手机就能使用的完整商业系统,而是提供Android框架、系统服务、运行时、原生库、构建系统、HAL接口定义以及参考设备配置的“平台源代码集合”。理解AOSP,是后续系统构建、裁剪、定制与平台移植的起点。

核心认知:AOSP是“平台基线”,不是“整机交付物”。厂商在AOSP之上叠加GMS、驱动、闭源HAL、定制UI与运营商配置,才形成可上市的设备系统。

一、历史脉络:从Android Inc.到AOSP

2003年,Andy Rubin等人创立Android Inc.,最初目标是面向数码相机的操作系统。2005年Google收购该公司,将方向转向智能手机。2007年11月,Google联合多家芯片、终端与运营商企业成立开放手机联盟(OHA),并发布Android 1.0。2008年10月,首款Android手机HTC Dream(G1)上市。同年,Google将Android核心代码以开源方式发布,AOSP正式成为公共代码基线。

此后AOSP的演进呈现两条主线:一条是每年一个主要版本的平台能力升级,另一条是Google将越来越多“通用能力”从AOSP中抽离到闭源GMS或独立模块中。因此,AOSP的代码边界并非固定不变,而是随版本和商业策略动态调整。

二、代码仓库组成:一个多仓库协同的工程体系

AOSP不是单一Git仓库,而是由数百个Git仓库组成的超级工程,通过repo工具统一管理。其顶层清单文件default.xml定义了各仓库的路径、远程地址与版本分支。典型组成如下:

  • frameworks/base:Android框架核心,包含ActivityManager、WindowManager、PackageManager等系统服务。
  • system/core:init、logd、adbd、fastboot等系统基础组件。
  • art:Android Runtime,负责DEX字节码执行与垃圾回收。
  • bionic:Android专用C库,替代glibc以适配移动端。
  • hardware/interfaces:HIDL/AIDL定义的HAL接口,是平台移植的关键契约。
  • device/:参考设备与厂商设备配置,如device/generic、device/google。
  • build/:Soong、Make、Kati等构建系统与镜像打包规则。
  • external/:第三方开源库,如skia、libpng、ffmpeg等。
  • packages/:系统应用与模块,如Settings、SystemUI、Launcher。

这些仓库通过repo sync拉取后,形成本地工作区。构建时由Soong解析Android.bp,Kati解析Android.mk,最终生成system.img、vendor.img、boot.img等分区镜像。

AOSP 代码仓库组成与构建产物关系 repo 统一管理 · Soong/Kati 构建 · 分区镜像输出 repo 清单 default.xml · manifest 分支 · 远程仓库地址 · 路径映射 repo sync frameworks/base AMS · WMS · PMS 系统服务与框架 API Java / Kotlin art + bionic ART 运行时 · DEX 执行 bionic C 库 · 链接器 C / C++ / 汇编 hardware/interfaces HIDL / AIDL HAL Camera · Audio · Sensor 接口契约 device/ 参考设备配置 BoardConfig · 分区表 平台移植入口 build/ Soong · Kati · Make Android.bp · Android.mk 镜像打包规则 external/ + packages/ 第三方库 · 系统应用 skia · Settings · SystemUI 可裁剪模块 system.img 框架 + 系统应用 vendor.img HAL + 厂商驱动 boot.img 内核 + ramdisk product.img 产品定制分区 AOSP 提供平台基线;GMS、闭源 HAL、驱动与定制 UI 由厂商在基线之上叠加,形成可上市系统

三、版本演进:从甜点到年度版本

AOSP早期以甜点代号命名,如Cupcake(1.5)、Donut(1.6)、Eclair(2.0)、Froyo(2.2)、Gingerbread(2.3)、Ice Cream Sandwich(4.0)、Jelly Bean(4.1)、KitKat(4.4)、Lollipop(5.0)、Marshmallow(6.0)、Nougat(7.0)、Oreo(8.0)、Pie(9.0)。从Android 10开始,Google取消甜点代号,改用数字版本,并强化Project Treble、Mainline与GKI等模块化策略。

版本关键变化对移植的影响
Android 8.0 OreoProject Treble 引入 VNDK 与 HIDLFramework 与 Vendor 解耦,HAL 接口稳定化
Android 10取消甜点代号,引入 Mainline 模块部分系统组件可独立更新,减少整机 OTA 依赖
Android 11GKI 内核统一,AIDL HAL 推广内核与驱动分离,HAL 逐步从 HIDL 迁移到 AIDL
Android 12+Virtual A/B、模块化系统组件OTA 与分区布局更复杂,需关注动态分区

四、许可证与社区协作模式

AOSP采用多许可证并存模式。核心平台代码以Apache License 2.0为主,允许厂商闭源修改与再分发;内核部分采用GPLv2,要求衍生代码开源;部分工具与库使用BSD、MIT等宽松许可证。这种组合使Android既能被厂商深度定制,又能保持平台基线的开放性与可移植性。

社区协作方面,AOSP通过android.googlesource.com公开代码,使用Gerrit进行代码评审,通过repo与git完成多仓库同步。开发者可提交Patch,但最终合入由Google维护者决定。OHA成员可提前获取部分版本信息,普通开发者则通过公开分支参与。

实操建议:首次接触AOSP时,先用repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1拉取清单,再执行repo sync -j8。不要急于全量编译,先阅读build/make/target/product/下的产品配置,理解PRODUCT_PACKAGES与PRODUCT_COPY_FILES的作用。

五、常见误区与复盘

  • 误区一:AOSP等于完整Android。实际上AOSP缺少GMS、Play Store、厂商驱动与闭源HAL,不能直接作为消费级系统交付。
  • 误区二:所有代码都在一个Git仓库。AOSP是数百个仓库的集合,必须用repo管理,单独git clone无法获得完整平台。
  • 误区三:许可证统一为Apache 2.0。内核是GPLv2,部分工具是BSD/MIT,移植时需逐仓库确认许可证义务。
  • 误区四:版本越新越容易移植。新版本引入GKI、动态分区与AIDL HAL,对厂商适配能力要求更高,需评估芯片平台支持情况。
在平台移植项目中,务必先确认目标AOSP版本与芯片厂商BSP的匹配关系。版本错配会导致HAL接口不兼容、内核无法启动或分区镜像无法烧录。建议以芯片厂商推荐的AOSP基线为起点,再逐步叠加定制。

总结来看,AOSP是一个由多仓库、多许可证、多版本分支构成的开放平台基线。掌握其历史脉络、仓库组成、版本演进与协作模式,是后续进行系统构建、裁剪优化与平台移植的前提。只有先厘清“基线提供什么、厂商补充什么”,才能在工程实践中做出正确的技术决策。