安卓源码简称AOSP,全称"Android Open Source Project",中文意为"Android 开放源代码项目"。
后续我们提到的aosp就是表示安卓源码。
编译环境
以前官方源码是支持mac系统编译的,后来谷歌官方就不支持了。
这里我使用的的系统是ubuntu24.04
比较多人用的是20.04版本,这里我用24.04还踩了一些坑的,比如会报libncurses找不到等,这里通过软连接的方式解决。。。
根据Google官方文档:
2021年6月22日之后的Android系统版本不支持在macOS系统上构建
我们只能构建之前的版本,或者之后发布的以前版本的补丁修复。
为了尽可能地减少莫名其妙地错误,我们使用Linux乌班图进行编译,笔者使用的系统版本是Ubuntu20.04
aosp的源码工程非常庞大,单单源码就有几十个G的大小,它的下载和全量编译都是非常耗时的,因此尽可能地使用性能较好的硬件电脑进行学习。
硬件建议:
- CPU不低6核以上
- 内存不低于32G
- 存储空间500G以上的SSD
我看一下网上有一些资料Android12版本的源码也能在mac上编译通过,但是电脑多是X86架构的,不知道M1的能否成功, 有兴趣尝试的同学可以试试,感觉坑应该少不了...
这里不做尝试...
编译步骤
- 安装必备工具
这没什么好说的,用过Ubuntu的童鞋们都知道使用apt命令即可:
arduino
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python
安装libncurses6并建立软连接
bash
sudo apt install libncurses6
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6.4 /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6.4 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
- repo工具准备
因为安卓源码是使用repo进行代码管理的,我们需要先下载repo工具:
bash
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
然后将repo配置到你的环境变量中去,将一下内容复制到你的~/.bashrc
里保存即可:
ini
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
PATH=~/bin:$PATH
最后别忘了source一下,使得更改的环境变量及时生效:
bash
source ~/.bashrc
- 源码下载
我们使用一下代码初始化仓库,并同步代码:
bash
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
mkdir aosp
cd aosp
#初始化仓库,-b 指示分支,这里使用 android12
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r27
#同步远程代码
repo sync
-b 后面的参数可以参考官方文档:
源代码标记和 build (opens new window)
同学们可以按照自己的兴趣选择合适的版本进行学习,虽然说每个版本可能都会有大的改动的,但是底层的逻辑大都是相通的,我们学会一个版本,另外一个版本肯定也不难。
这个下载过程比较久,笔者新下载的就用了大半天...
- 源码编译
我在lunch选择之后,编译成功了执行emulator,但是并没有有模拟器出来,后来查找资料发现新版的因为不带有模拟器的image。所以android12上,我们需要添加模拟器的选择.
这里我们先修改mk文件即可。
我们在源码目录下找到build/make/target/product/AndroidProducts.mk
文件, 然后在最后一行添加sdk_phone_x86_64-eng
然后就可以进行编译了:
bash
source build/envsetup.sh
lunch sdk_phone_x86_64
#lunch aosp_x86_64-eng
# 这里用16线程,取决你的cpu
make -j16
首次编译是全量编译,也是耗时很久的,我新下载的源码首次进行编译也用了两三个小时。
-
运行模拟器
emulator
我们就可以看到模拟器啦。。。

自此,aosp的源码编译过程就算是完成啦,你是否看到了希望的曙光呢?
至于怎么开发自定义的Rom呢?我们下期再扯淡。。。
关注我,一起进步,人生不止coding!!!