Ubuntu 22.04下载aosp并刷到Pixel 2XL

1. 环境:

txt 复制代码
Ubuntu 22.04
Pixel 2XL欧版

2. 下载源码

shell 复制代码
# 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结尾的文件,放到源码目录下。

直接双击提取或者tar zxvf命令解压,会出来两个size很大的sh文件。
执行这两个sh,会在源码目录创建一个vender文件夹,并创建如下两个文件夹。

3.2 查询自己手机型号

我们还需要查询的一步是找到我们自己设备的名字,在选择设备 build查询

lunch 菜单中提供了建议的设备 build,在不使用任何参数的情况下运行 lunch 命令即可查看。如需可用构建类型的信息及有关 lunch 命令的更多信息,可以参阅选择目标

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

bash 复制代码
# 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做了什么呢?

如果发现关掉terminal之后无法再调用emulator需要重新lunch sdk_phone_x86_64一次 lunch之后的配置如下:

ini 复制代码
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 模式:

markdown 复制代码
    adb reboot bootloader

在设备处于 fastboot 模式后,运行以下命令:

markdown 复制代码
    fastboot flashall -w

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

遇到的问题:Cannot generate image for userdata
scss 复制代码
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报错:

bash 复制代码
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驱动程序二进制文件有没有下载正确。

如果失败了并且无法开机,可以尝试刷谷歌提供的官方线刷包救回来。

相关推荐
太空漫步112 小时前
android社畜模拟器
android
海绵宝宝_4 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
别说我什么都不会6 小时前
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
操作系统·harmonyos
凯文的内存6 小时前
android 定制mtp连接外设的设备名称
android·media·mtp·mtpserver
天若子6 小时前
Android今日头条的屏幕适配方案
android
林的快手8 小时前
伪类选择器
android·前端·css·chrome·ajax·html·json
望佑8 小时前
Tmp detached view should be removed from RecyclerView before it can be recycled
android
xvch10 小时前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
别说我什么都不会13 小时前
鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
操作系统·harmonyos
人民的石头14 小时前
Android系统开发 给system/app传包报错
android