我是从2019年底才开始接触AOSP(Android Open Source Project)的,因为当时在研究Android内存这块,了解到Android 10推出的Perfetto框架,能从系统底层记录堆内存的分配情况,听起来太酷了。但是实际使用过程中发现它的一个严重bug,比如记录王者荣耀的堆内存分配,heapprofd会在王者荣耀启动后没多久就退出,我改Perfetto的代码修了这个bug,quick and dirty,于是我就有构建AOSP的需求。同时也和Google工程师沟通,他在master修复了这个bug,当然这个过程是漫长的。

从Android 9开始AOSP默认只支持Pixel系列,所以买了一台测试手机Pixel 2,花了不到1000块,性价比还是挺高的。

当时我是在macOS下构建的AOSP,因为AOSP需要文件系统区分大小写,所以在macOS的下要么买一个新的SSD格式化为区分大小写的,要么创建一个区分大小写的disk image。用iMac(i7-6700K, 16GB RAM, 512GB SSD)构建花了3个多小时,用MBP(i7-7920HQ, 16GB RAM, 250GB disk image)花了6个多小时。

最近我又准备构建AOSP,在macOS下却遇到了一些莫名其妙的错误,Google许久没解决掉,加上我新组装了一台PC,想利用它的高配置,构建更快点,我尝试了在Windows 10上利用WSL构建AOSP,也是遇到各种错误。我反思了一下,为什么不用官方推荐的Ubuntu呢,浪费时间在这些莫名其妙的错误上,不太值。于是专门购买一块SSD来安装Ubuntu,官方推荐的是18.04,我安装了20.04,还好也可以构建成功。在PC(i7-10700K, 32GB RAM, 1TB SSD)上花了1小时10分钟,Nice。

下面列出在Ubuntu上构建AOSP各个步骤,最简化的流程。

  • 安装依赖包

官方列出

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

实践解决error while loading shared libraries: libncurses.so.5

sudo apt-get install libncurses5

  • 下载代码管理工具repo,这是一个python脚本,如果你的默认python不是python3的话,需要打开文件把第一行的python改成python3

mkdir -p ~/bin

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

vim .bashrc

export PATH=~/bin:$PATH

在中国大陆需要设置http_proxy和https_proxy,原因应该都懂的,AOSP推荐用bash,设置好环境变量后,需要重开一个bash

  • 创建代码目录,可用空间官方推荐需要250GB,下载后代码库70GB左右,构建完成后占用170GB左右

mkdir ~/aosp

cd ~/aosp

repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r41

  • 下载代码,5M的出口带宽,峰值500KB/s左右,我下了一天

repo sync

Pixel 2的代号是walleye,下载解压后会得到extract-google_devices-walleye.sh和extract-qcom-walleye.sh,移动到AOSP的代码目录,分别执行两个sh脚本

  • 设置构建参数,userdebug版本可以拥有root权限,这当然是我想要的

source build/envsetup.sh

lunch aosp_walleye-userdebug

  • 启动构建

m

  • 刷机,在Pixel 2设置里开启USB debugging和OEM unlocking,Pixel 2通过USB连接到PC

adb reboot bootloader

fastboot flashall -w

如果想清除构建的内容的话,可以执行make clobber。

虽然我是Apple的粉丝,但是能使用从源码构建出的系统,感觉是一件很酷的事情,拥有root权限也能更方便的去调试App,这台Pixel 2成为了我的Playground。