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_r25
,android-11.0.0_r25
对应的Build ID
是RP1A.201005.004.A1
适用于 Android 11.0.0 (RP1A.201005.004.A1) 的 Pixel 2 XL 二进制文件
硬件组件 | 公司 | 下载 | SHA-256 校验和 |
---|---|---|---|
供应商映像 | 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 configuration
是aosp_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驱动程序二进制文件有没有下载正确。
如果失败了并且无法开机,可以尝试刷谷歌提供的官方线刷包救回来。