Android源码的标准说法应该是叫AOSP。Android open source project。最详细的资料还是去看官网为佳,我这里只能算一个概述或者学习笔记吧。
https://source.android.com/?hl=zh-cn
1 遇到的坑
第一个坑是如果要自己编译安卓,电脑的硬盘配置和内存都要升级。。。硬盘要单独的500G,内存最少得搞到32G。目前绝大多数电脑只到32G,要分给虚拟机这么多的话,要么电脑只装ubuntu,要么就升级内存到64。现在嘛,内存又是大涨。。。
AOSP的概述图如下:
下载代码:
第二个坑是国内的话会被墙,所以用官网的命令是下不下来的。我试了一阵,可以用的命令和官网有不同:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
之后repo sync即可。
这里有个现实问题,repo不稳定容易断,断了恢复起来很麻烦。所以国内各大厂商或者工作室都是改成压缩包整体下载。这里就会遇到第三个坑,有些工作室是把压缩包放到百度云。将近100G,百度云不开会员限速200来K,得下差不多一周。真的是逼着你去开会员才行。
在构建上,Android将Make改成了Soong。扯一堆理由其实就是为了绑定码农和厂商,对开发者都是折腾增加学习成本。
Android.bp就是新的构建文件,Android.mk则是老的。
2 AOSP代码结构
从安卓来说,可以划分上面的几个层次。如果是做App,那么关注Framework就可以了,主要是那几个Manager,如果是做驱动,那么主要就是关注HAL。另外还要一个熟悉系统,也就是熟悉环境搭建,裁剪的哥们。这样三个组合,一个草台班子就搭起来了。
SDK的目录结构:
大致作用如下(来自GPT):
瑞芯微的则是这样:
系统开发或者裁剪,就重点关注build。
App开发就盯着Framework。
驱动开发就看看hardware。
3 AOSP编译和生成
编译有几种类型,分别是:
user:限制所有权限,用于发布给用户使用的最终版本。
userdebug: 开放部分权限,允许root。
eng:工程师模式,开放所有权限并且有额外的调试工具。
编译的命令倒不算复杂。
source build/envsetup.sh 预设环境
lunch选择平台(一般选aosp_arm64-eng或者aosp_x86_64-eng)
make -j8 开始全编译(可以加参数编译单独的模块,也可以使用build.sh编译)
用别人的图说明一下编译命令。
生成的东西在out中
-
系统镜像(System Image):最主要的输出是 Android 系统的系统镜像。这个镜像包含了 Android 操作系统的核心文件,系统应用程序,框架层等。它通常位于
out/target/product/{device}/system.img
。 -
引导镜像(Boot Image):引导镜像包含了引导加载程序(bootloader)、Linux 内核以及用于引导 Android 系统的文件。它通常位于
out/target/product/{device}/boot.img
。 -
Vendor 分区镜像(Vendor Image):Vendor 分区镜像包含了由设备制造商提供的供应商特定代码和二进制文件。它通常位于
out/target/product/{device}/vendor.img
。 -
用户数据分区镜像(Userdata Image):用户数据分区镜像包含了预置的用户数据,如预装的应用、系统设置等。它通常位于
out/target/product/{device}/userdata.img
。 -
缓存分区镜像(Cache Image):缓存分区镜像包含了 Android 系统的缓存数据。它通常位于
out/target/product/{device}/cache.img
。 -
Recovery 分区镜像(Recovery Image):Recovery 分区镜像用于恢复和更新 Android 系统。它通常位于
out/target/product/{device}/recovery.img
。 -
Ramdisk 镜像:Ramdisk 镜像包含了一个临时文件系统,用于引导时加载一些必要的文件。它通常与引导镜像一起使用。
-
系统库和应用程序 APK 文件:编译过程还会生成 Android 系统中的库文件和应用程序 APK 文件。这些文件通常位于
out/target/product/{device}/system/
目录下。 -
构建工具和可执行文件:AOSP 编译还生成一系列构建工具、可执行文件和脚本,用于构建 Android 系统、调试、模拟器等。这些工具位于
out/host/
目录下。 -
其他中间文件和调试信息:编译过程还会生成其他一些中间文件、调试信息和编译日志,这些文件通常位于
out/
目录下的子目录中。
生成物这个每家会不同,像瑞芯微的会是这样:
烧写则是一般有芯片商提供工具,也可以自己烧写,感觉一般烧system.img和vendor.img会多一些。瑞芯微那边会帮你再打一下包,比如super.img。不过整体还是差不多的。
烧写工具如下:
基本就这些了。后面再看看怎么增加App,还有怎么增加设备,一般打工要涉及到的知识,就差不多了。
实操篇:
参考资料:
瑞芯微开发手册,正点原子手册。
AOSP系列—阅读源码并熟悉AOSP目录结构_aospxref-CSDN博客
史上最简最全,Android AOSP源码阅读+编译环境这一篇就够了 - 知乎
Android新增LED设备--从底层到上层理解安卓架构_android flash_led_itarget-CSDN博客