2. AOSP概述
Android Open Source Project(AOSP)是Google主导维护的Android平台开源基线。它并不是一个可以直接刷入手机就能使用的完整商业系统,而是提供Android框架、系统服务、运行时、原生库、构建系统、HAL接口定义以及参考设备配置的“平台源代码集合”。理解AOSP,是后续系统构建、裁剪、定制与平台移植的起点。
一、历史脉络:从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早期以甜点代号命名,如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 Oreo | Project Treble 引入 VNDK 与 HIDL | Framework 与 Vendor 解耦,HAL 接口稳定化 |
| Android 10 | 取消甜点代号,引入 Mainline 模块 | 部分系统组件可独立更新,减少整机 OTA 依赖 |
| Android 11 | GKI 内核统一,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成员可提前获取部分版本信息,普通开发者则通过公开分支参与。
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是一个由多仓库、多许可证、多版本分支构成的开放平台基线。掌握其历史脉络、仓库组成、版本演进与协作模式,是后续进行系统构建、裁剪优化与平台移植的前提。只有先厘清“基线提供什么、厂商补充什么”,才能在工程实践中做出正确的技术决策。