Ubuntu20.04.2LTS 环境下,Android11(R)版本源码下载,编译,Pixel4刷机
前言:前段时间为了给Pixel4刷机,下载源码、编译、刷机,踩了无数个坑,也花了很多时间,在这里做个笔记,便于以后避坑,也给以后遇到同样问题的同学一些参考
一、源码下载
下载 android11 需要python3.9
1、sudo apt update
2、sudo apt install software-properties-common
3、sudo add-apt-repository ppa:deadsnakes/ppa
4、sudo apt install python3.9
//查看python版本号,确认是否安装成功
5、python3.9 -V
如果python还安装了其他版本需要切换版本到3.9版本
安装git
sudo apt-get upgrade
sudo apt-get install git
sudo snap install git-repo
git config --global user.email "xxxxxxx@gmail.com"
git config --global user.name "xxxxx"
安装curl
sudo apt-get install curl
配置环境变量,安装repo(使用清华镜像站下载)
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
打开bin文件夹下的repo文件,将
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改为
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
初始化仓库、选择分支、同步
创建放源码的文件夹
mkdir android11.0.0
cd android11.0.0
初始化仓库
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
切换到指定分支
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r36
这里的 android-11.0.1_r36 是源码分支,需要填写对应设备的分支,可点击这里查询(没有梯子的可以在百度上搜):分支列表
同步源码树
repo sync
不出意外的话,几个小时就下载好了
二、源码编译
准备编译环境
安装jdk
sudo apt-get update
sudo apt-get install openjdk-8-jdk
构建编译环境依赖
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache libncurses5
下载编译驱动
如果只是运行模拟器忽略这一步,我的设备Pixel4手机需要下载驱动编译脚本–脚本链接,下载机器对应的驱动编译脚本文件并解压,得到extract-google_devices-flame.sh和extract-qcom-flame.sh,放到源码的根目录执行(会让输入 I ACCEPT,回车别按的太快),执行后会得到vender目录
开始编译
//进入源码根目录
cd android11.0.0
source build/envsetup.sh
lunch
选择自己需要的编译配置,点这里配置列表(需要梯子)或者下表查看配置
我是Pixel4设备所以要选aosp_flame_userdebug也就是22然后回车,如果只运行模拟器,则需要选择电脑对应cpu架构的配置(不然模拟器运行不起来),一般电脑的CPU架构是X86(可以根据电脑选择29或者30)
开始编译:
make -j8
这里的8为CPU的线程数量,如果电脑配置不太好,建议直接:
make
不出意外的话几个小时后编译OK
//运行模拟器,如果选择模拟器的话到这里就可以看到源码编译的系统了
emulator
三、刷机
安装adb
apt-get install android-tools-adb
连接上手机
开始刷机
进入bootloader模式
adb reboot bootloader
解锁设备
fastboot flashing unlock
配置ANDROID_PRODUCT_OUT环境
export ANDROID_PRODUCT_OUT=/home/ubuntu/android11.0.0/out/target/product/flame
开始刷机
fastboot flashall -w
完成
四、过程中遇到的问题
1:找不到 ncurses.so 库
sudo apt-get install -y libncurses5
2:内存不足
增加Swap分区
1.创建交换分区的文件:增加4G大小的交换分区,count 为块大小。
# dd if=/dev/zero of=/home/swapfile bs=1M count=4096
2.设置交换分区文件:
# mkswap /home/swapfile # 建立swap 的文件系统
3.立即启用交换分区文件:
# swapon /home/swapfile #启用swap文件
4.使系统开机时自启用,在文件/etc/fstab中添加一行:
/home/swapfile swap swap defaults 0 0
3:Out of memory error
在make前输入(增加JVM内存)
export _JAVA_OPTIONS="-Xmx8g"
如果还不能解决,可以在编译时,打开系统监视器看一下内存,不够的话需要加内存条或者换其他android版本
4:找不到vendor/qcom/coral/proprietary/com.qualcomm.qcrilmsgtunnel.xml
这里可能是Google工程师写错了吧,找到源头改一下路径就可以了
源头在:vendor/qcom/flame/device-partial.mk
将
vendor/qcom/coral/proprietary/com.qualcomm.qcrilmsgtunnel.xml:system_ext/etc/permissions/com.qualcomm.qcrilmsgtunnel.xml \
改为
vendor/qcom/flame/proprietary/com.qualcomm.qcrilmsgtunnel.xml:system_ext/etc/permissions/com.qualcomm.qcrilmsgtunnel.xml \
即可
5:刷机过程中报错 :FAILED (remote: Partition should be flashed in fastbootd),原因是adb版本太旧,可以通过( adb version )查看版本号,需要到官网下载SDK Platform Tools,替换掉原来的目录(usr/lib/android-sdk/platform-tools)
6:刷机时发现缺少镜像文件,或者刷完机开不起机可以排查下源码分支、build配置和驱动脚本