1. 环境:

Ubuntu 22.04
Pixel 2XL欧版

2. 下载源码

# 1. 装置jdk
sudo apt install openjdk-11-jdk

# 2. 装置需求的依赖包
sudo apt install repo git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5

# 3. 装备git name和e-mail
git config --global user.name yocnzzz
git config --global user.email xyz@abc.com

# 4. init repo,google源地址和清华源地址。详细下载哪个分支查看下面的解释
repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r25
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r25

# 5. 开始下载
repo sync

关于第4步: google源地址和清华源地址的挑选,其实能够无脑挑选清华源地址。

挑选哪个分支,要看你希望的Android版别和需求刷到什么机器上用。在代号、符号和 build 号这儿有详细的版别号介绍。

比方我需求刷到Pixel 2 XL上,官方给出的最高支持版别是Android 11,而关于Android 11我可选的就有这三个版别:

build ID 符号 版别 支持的设备 安全补丁级别
RP1A.201005.004.A1 android-11.0.0_r25 Android11 Pixel 2、Pixel 2 XL 2020-10-05
RP1A.201005.004 android-11.0.0_r4 Android11 Pixel 2、Pixel 2 XL、Pixel 3、Pixel 3a、Pixel 3a XL、Pixel 3 XL、Pixel 4、Pixel 4 XL 2020-10-05
RP1A.200720.009 android-11.0.0_r1 Android11 Pixel 2、Pixel 2 XL、Pixel 3、Pixel 3a、Pixel 3a XL、Pixel 3 XL、Pixel 4、Pixel 4 XL 2020-09-05

一般优先运用最新的版别,所以我这儿运用android-11.0.0_r25.

3. 编译

假如只需求模拟器运转就不需求去下载下面的驱动程序二进制文件,能够直接source build/envsetup.sh即可

3.1 预备手机的驱动程序二进制文件

假如要刷到手机上,需求先去Nexus 和 Pixel 设备的驱动程序二进制文件这儿去下载你的机器对应的二进制文件。

比方我的设备是Pixel 2 XL,我上面编译的分支是android-11.0.0_r25android-11.0.0_r25对应的Build IDRP1A.201005.004.A1

适用于 Android 11.​0.​0 (RP1A.​201005.​004.​A1) 的 Pixel 2 XL 二进制文件

硬件组件 公司 下载 SHA-256 校验和
供应商映像 Google Link c6b5b516759b40c0e01cedfa808efe727e2824da97cbd07307af71d897f27e1b
GPS、音频、相机、手势、图形、数字版权办理、视频、传感器 Qualcomm Link e5e721d2d14f72bd938eb79880cc883f580d17dc5588a76bb1e83d5166a71350

点Link把两份文件下载下来,两份tgz结束的文件,放到源码目录下。
直接双击提取或者tarzxvf指令解压,会出来两个size很大的sh文件。

Ubuntu 22.04下载aosp并刷到Pixel 2XL
履行这两个sh,会在源码目录创立一个vender文件夹,并创立如下两个文件夹。

Ubuntu 22.04下载aosp并刷到Pixel 2XL

3.2 查询自己手机类型

我们还需求查询的一步是找到我们自己设备的姓名,在挑选设备 build查询

lunch菜单中供给了建议的设备 build,在不运用任何参数的情况下运转lunch指令即可查看。如需可用构建类型的信息及有关lunch指令的更多信息,能够参阅挑选目标

比方我的手机类型是Pixel 2 XL,对应的Build configurationaosp_taimen-userdebug

# source一下加载进来编译脚本
source build/envsetup.sh
# 挑选需求编译的版别,这儿挑选了能够直接模拟器调用的的装备,当然你能够用自己对应的装备,运用lunch aosp_taimen-userdebug
lunch sdk_phone_x86_64
# m编译,能够用-j8或者-j16,看机器的CPU架构挑选,不了解的话m就够了
m
# 调用模拟器加载编译完的体系,一般能够先用sdk_phone_x86_64试一下代码sync的对不对,编译了多个体系能够用lunch来切换。
emulator

envsetup.sh做了什么呢?

Ubuntu 22.04下载aosp并刷到Pixel 2XL

假如发现关掉terminal之后无法再调用emulator需求重新lunch sdk_phone_x86_64一次 lunch之后的装备如下:

yocn@yocn-MECHREVO:~/aosp$ lunch sdk_phone_x86_64
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=11
TARGET_PRODUCT=sdk_phone_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.2.0-36-generic-x86_64-Ubuntu-22.04.3-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=RP1A.201005.004.A1
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera device/generic/goldfish device/generic/goldfish-opengl
============================================

刷机到Pixel

这儿不展开说解锁bootloader,默许现已解锁,能够参考官方文档:# 解锁引导加载程序

应该是有一些美版的手机是解锁不了,必须要欧版才干解锁。

刷机其实就两个指令:
在启动时按住相应的组合键或运用以下指令使设备进入fastboot形式:

    adb reboot bootloader

在设备处于 fastboot 形式后,运转以下指令:

    fastboot flashall -w

-w选项会擦除设备上的/data分区;该选项在您第一次刷写特定设备时十分有用,但在其他情况下则没必要运用。

遇到的问题:Cannot generate image for userdata
Writing 'system_b'                                 OKAY [  2.086s]
Sending sparse 'system_b' 2/6 (458752 KB)          OKAY [ 13.269s]
Writing 'system_b'                                 OKAY [  2.081s]
Sending sparse 'system_b' 3/6 (458752 KB)          OKAY [ 14.477s]
Writing 'system_b'                                 OKAY [  2.085s]
Sending sparse 'system_b' 4/6 (458752 KB)          OKAY [ 14.415s]
Writing 'system_b'                                 OKAY [  2.094s]
Sending sparse 'system_b' 5/6 (524200 KB)          OKAY [ 17.091s]
Writing 'system_b'                                 OKAY [  2.411s]
Sending sparse 'system_b' 6/6 (150380 KB)          OKAY [  4.961s]
Writing 'system_b'                                 OKAY [  0.682s]
extracting system_other.img (311 MB) to disk... took 1.190s
archive does not contain 'system.sig'https://blog.csdn.net/cheriyou_/article/details/109722008
Sending 'system_a' (318468 KB)                     OKAY [  9.179s]
Writing 'system_a'                                 OKAY [  1.447s]
extracting vendor.img (325 MB) to disk... took 1.251s
archive does not contain 'vendor.sig'
Sending 'vendor_b' (333468 KB)                     OKAY [ 10.986s]
Writing 'vendor_b'                                 OKAY [  1.531s]
archive does not contain 'vendor_other.img'
Erasing 'userdata'                                 OKAY [  0.283s]
/usr/lib/android-sdk/platform-tools/mke2fs failed with status 1
fastboot: error: Cannot generate image for userdata

解决方法如下:摘自# Android-fastboot -w报错:

1.翻开终端履行which fastboot  (eg: /usr/bin/fastboot)
2.翻开fastboot所在目录  (cd /usr/bin)
3.查看目录下是否存在make_f2fs文件、mke2fs文件、lib64文件夹(文件夹下含libc++.so文件)
4.不存在从platform-tools中拷贝曩昔 , platform-tools的下载网址: https://developer.android.com/studio/releases/platform-tools
    sudo cp make_f2fs /usr/bin
    sudo cp mke2fs /usr/bin
    sudo cp -r lib64 /usr/bin
5. 赋予权限
     sudo chmod 777 make_f2fs
     sudo chmod 777 mke2fs
     sudo chmod -R 777 lib64

假如出现进不了体系check一下上面的过程,尤其是vender驱动程序二进制文件有没有下载正确。

假如失败了并且无法开机,能够测验刷谷歌供给的官方线刷包救回来。