AOSP 构建系统全解析(序言)
专栏:AOSP 构建系统全解析 源码版本:Android 17 作者:知昂七昂
一、为什么我来写这个专栏
这两年 AI 有多卷,不用我多说了吧。
前端切图仔被 Cursor 追着打,后端 CRUD 被 Copilot 追着打,算法岗一个岗位几千人投,连测试都开始被 AI 自动用例替代。朋友圈里天天有人在转"35 岁被裁员后开滴滴"、"转行做跨境电商"、"备考公务员"。
我不是说前后端不好,但是:当一份工作的门槛低到"一个实习生加一个 AI 就能干"的时候,你就要小心了。
那什么方向短时间内 AI 替代不了?
我的答案是:Android 系统开发。
为什么?
第一,一套完整的源码,300G+,AI 想要全文理解很难,它只能逐步推理一部分;
第二,得懂 Linux、懂编译原理、懂硬件、懂内核,这些东西是几十年积累下来的,不是训练几个月就能会的;
第三,出了问题得真的刷机、真的烧录、真的抓 log,才能解决;
第四,这个圈子很小,全国做手机/车机系统的公司就那么多,技术壁垒高,人员流动慢,不会轻易被替代。
我自己就是做手机系统的。每天打交道的就是 AOSP 源码、编译、刷机、调 log、框架framework等等。
今天这个专栏,我想从一个所有系统开发工程师入门都绕不开的东西讲起——AOSP 的构建系统。
二、为什么一定要掌握构建系统?
很多人觉得:编译嘛,source → lunch → make,完事。会跑命令不就行了?
错了。
构建系统是你理解整个 Android 系统的入口。
你想想:
- 编译出来的
system.img里面到底装了哪些东西? - 为什么有的 App 在
/system/app,有的在/system/priv-app,有的在/product/app? - 为什么产品叫
xxx_car-userdebug,这个名字背后到底配了什么? - 为什么加了一个新 App,要改七八个地方才能在系统里看到?
- 为什么改了一个系统属性,重启就生效,有的要重新编译?
- 手机系统有哪些分区?这些分区的作用是啥?我自己想客制化一个分区怎么做?
这些问题,如果不去扒构建系统的代码,永远只能停留在"会跑命令"的层面。
掌握了构建系统,就知道:一个 Android 系统从源码到能刷机的镜像,中间到底经历了什么。
这是我们从"会改 App"到"会做系统"的第一道门槛。
三、这个专栏会讲什么?
我不会讲那种"什么是 makefile"的入门科普,那些东西网上一搜一大把。
这个专栏是从 Android 17 真实源码出发,讲手机厂/车机厂系统开发每天真的会遇到的问题。
具体会覆盖这些内容(包含但不限于):
1. 构建系统全景
- 从
source build/envsetup.sh到out/产物,整条链路到底跑了什么 - Soong、Blueprint、Kati、Ninja 四个角色分别是干嘛的
- 为什么 Google 要从 Make 迁移到 Soong,现在直接敲
make为什么会报错
2. 产品配置与 lunch
lunch后面那个产品名是怎么被系统找到的- 一个新的手机/车机产品,要在哪些目录加哪些文件
build.prop是怎么生成的,里面那些 ro.xxx 属性都是哪来的
3. 模块编译
Android.bp和Android.mk到底怎么写mm、mma、m三个命令的区别,什么时候用哪个- 怎么加一个新的系统 App,怎么加一个新的 native 库
4. 分区与镜像
boot.img、system.img、vendor.img、product.img里面分别是什么- super 动态分区是怎么组装的
- 怎么自己加一个厂商专属分区(这个需求手机厂车机厂都有)
5. 客制化实战
- 怎么替换系统 App(SystemUI / Launcher / OOBE)
- 怎么预装第三方 App 到系统里
- 怎么改系统资源(字体/图标/品牌色)
- 怎么加系统属性,怎么在运行时读
6. 安全与启动
- AVB 校验是怎么回事,为什么改了 system 分区就起不来
- 内核和 ramdisk 是怎么打包进 boot.img 的
- OTA 升级包是怎么生成的
7. 车机专项
- Automotive 构建和手机构建有什么不一样
- 车机多屏、多用户是怎么在构建层面支持的
8. 工程化
- 编译问题怎么排查
- CI/CD 构建流水线怎么搭
- 怎么写一个自己的编译脚本
四、能收获什么?
看完这个专栏,你应该能:
- 独立在 AOSP 源码里加一个新产品/新模块,不用每次都问老员工
- 说清楚从源码到刷机镜像的完整流程,面试被问到不慌
- 解决常见的编译问题,不用每次都 clean 重编
- 理解手机厂/车机厂的客制化套路,知道每个需求背后要改哪些地方
- 能和编译器、内核、驱动的同事对上话,知道改的东西最后会被怎么组装
五、写在最后
这个专栏没有鸡汤,没有"三天精通 Android",就是一篇一篇带你看真实源码、改真实代码、解决真实问题。
如果你也是做系统开发的,或者想转行做系统开发,欢迎关注,大家互相探讨。
我们下一篇,从 source build/envsetup.sh 这行命令开始。