Ubuntu20.4环境下,Android11(R)源码,下载,编译,Pixel4刷机

Ubuntu20.04.2LTS 环境下,Android11(R)版本源码下载,编译,Pixel4刷机

前言:前段时间为了给Pixel4刷机,下载源码、编译、刷机,踩了无数个坑,也花了很多时间,在这里做个笔记,便于以后避坑,也给以后遇到同样问题的同学一些参考

一、源码下载

  1. 下载 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版本

  1. 安装git
sudo apt-get upgrade
sudo apt-get install git
sudo snap install git-repo
git config --global user.email "[email protected]"
git config --global user.name "xxxxx"
  1. 安装curl
sudo apt-get install curl
  1. 配置环境变量,安装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'
  1. 初始化仓库、选择分支、同步

创建放源码的文件夹

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 是源码分支,需要填写对应设备的分支,可点击这里查询(没有梯子的可以在百度上搜):分支列表
Ubuntu20.4环境下,Android11(R)源码,下载,编译,Pixel4刷机_第1张图片

同步源码树

repo sync

不出意外的话,几个小时就下载好了

二、源码编译

  1. 准备编译环境

安装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
  1. 下载编译驱动

如果只是运行模拟器忽略这一步,我的设备Pixel4手机需要下载驱动编译脚本–脚本链接,下载机器对应的驱动编译脚本文件并解压,得到extract-google_devices-flame.sh和extract-qcom-flame.sh,放到源码的根目录执行(会让输入 I ACCEPT,回车别按的太快),执行后会得到vender目录

  1. 开始编译
//进入源码根目录
cd android11.0.0
source build/envsetup.sh
lunch

Ubuntu20.4环境下,Android11(R)源码,下载,编译,Pixel4刷机_第2张图片

选择自己需要的编译配置,点这里配置列表(需要梯子)或者下表查看配置
Ubuntu20.4环境下,Android11(R)源码,下载,编译,Pixel4刷机_第3张图片
我是Pixel4设备所以要选aosp_flame_userdebug也就是22然后回车,如果只运行模拟器,则需要选择电脑对应cpu架构的配置(不然模拟器运行不起来),一般电脑的CPU架构是X86(可以根据电脑选择29或者30)

开始编译:

make -j8

这里的8为CPU的线程数量,如果电脑配置不太好,建议直接:

make

不出意外的话几个小时后编译OK

//运行模拟器,如果选择模拟器的话到这里就可以看到源码编译的系统了
emulator

三、刷机

  1. 安装adb
apt-get install android-tools-adb

连接上手机

  1. 开始刷机

进入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配置和驱动脚本

你可能感兴趣的:(android基础,android,源码)