环境准备

  1. 手机:Pixel系列(此次实验使用Pixel2,代号walleye),建议使用pixel和nexus系列进行操作,其他厂商手机不方便确认AOSP版本与对应的vendor二进制驱动文件;

  2. 确认需要编译的AOSP版本号(vendor驱动程序要和aosp版本匹配才行,所以需要参考官方的镜像是基于哪个版本的AOSP进行编译的)

    • Nexus和Pixel设备的出厂映像找到目标系统对应的AOSP build号,注意手机型号。比如,此次实验需要给Pixel2刷入Android11的系统,而该系统对应的AOSP build号为RP1A.201005.004.A1如下图

      image-20260318092434447

    • 根据上面的build号找到对应的AOSP版本号,我这里是android-11.0.0_r25

      image-20260318092736872

  3. 根据AOSP版本号,找到对应的驱动二进制文件,有几个就下几个(有些只有一个,有些有两个):Driver Binaries for Nexus and Pixel Devices

    image-20260318101056027

  4. Ubuntu18系统的虚拟机(老型号、老系统尽量使用老的Linux发行版进行操作),注意配置:

    • 内存:至少至少16GB(如果内存不够,一定不会编译成功),至少22GB,最好30GB往上
    • 存储:至少至少500GB(AOSP源码在200GB左右,编译之后也这么大)
    • CPU:至少8核,越大越好,不超过物理机的逻辑处理器数量就可以
    • 网络:通信良好,不掉线就可以,越快越好(不强制具备境外通信能力)
    • 其他:无所谓,看个人喜好
  5. 安装一些软件、依赖

    1
    2
    3
    4
    5
    6
    7
    sudo apt update && \
    sudo apt install flex bison build-essential zlib1g-dev gcc-multilib g++-multilib \
    libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
    lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc fontconfig make git-core \
    gnupg zip unzip curl openjdk-8-jdk -y && \
    sudo apt clean && \
    sudo apt autoremove -y
  6. 给python3做软链接:某些脚本里面默认使用python,而不是python3或者python2,而Ubuntu18环境中默认为python3(版本为python3.6)

    1
    2
    sudo ln -s /usr/bin/python3.6 /usr/bin/python
    python --version

下载源码

  1. 借助清华源,初始化仓库,注意下面脚本最后的参数应该是上述对应的AOSP版本号

    1
    2
    3
    4
    5
    6
    7
    8
    sudo mkdir -p ~/bin/aosp && \
    sudo PATH=/bin:$PATH && \
    sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo && \
    sudo chmod a+x ~/bin/repo && \
    sudo echo `export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'` >> ~/.bashrc && \
    sudo source ~/.bashrc && \
    sudo cd ~/bin/aosp && \
    sudo repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r25
  2. 开始下载:j8表示使用8个进程下载,不要超过给虚拟机的CPU核心数量。保持网络通畅,不要断开,我这里下载了6个小时(睡一觉刚好)。

    1
    sudo repo sync -j8