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_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结束的文件,放到源码目录
下。
直接双击提取或者tarzxvf
指令解压,会出来两个size很大的sh文件。
履行这两个sh,会在源码目录创立一个vender文件夹,并创立如下两个文件夹。
3.2 查询自己手机类型
我们还需求查询的一步是找到我们自己设备的姓名,在挑选设备 build查询
lunch
菜单中供给了建议的设备 build,在不运用任何参数的情况下运转lunch
指令即可查看。如需可用构建类型的信息及有关lunch
指令的更多信息,能够参阅挑选目标。
比方我的手机类型是Pixel 2 XL
,对应的Build configuration
是aosp_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做了什么呢?
假如发现关掉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驱动程序二进制文件有没有下载正确。