一、编译环境/设备
- ubuntu 20.04 LTS
- openjdk 1.8
- Pixel XL
- Android版本:10.0
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt install openjdk-8-jdk
- 编译依赖
sudo apt-get install -y 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 -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install -y git-core gnupg zip curl zlib1g-dev gcc-multilib
sudo apt-get install -y libc6-dev-i386 x11proto-core-dev libx11-dev
sudo apt-get install -y unzip m4 lib32z-dev ccache libssl-dev
sudo apt-get install -y lib32ncurses5-dev
二、代码下载
- 安装初始化依赖工具
sudo apt install curl python git
- 配置repo工具
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
- 修改repo默认源,通过国内镜像更新:在~/.bashrc文件里添加如下两行,保存退出,然后执行source ~/.bashrc更新环境变量
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
- 配置git信息
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
- 初始化仓库
mkdir AOSP
cd AOSP
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
- 查看源码分支,选择其一下载
初始化完成之后,使用 “ls -a” 命令查看所有隐藏文件,找到.repo,切换到.repo/manifests目录,执行 git branch -a 可以看到所有分支,再次执行 “repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b + 分支名” ,如选择9.0版本:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r17 --depth=1 --platform=auto
- 同步源码
repo sync
三、编译源码
- 初始化编译环境,切换到源码根路径下,执行如下命令:
source build/envsetup.sh
- 选择编译目标,真机选项见 官方文档
lunch aosp_arm64-eng
- 开始编译,可能等待数个小时
make -j12
- 当出现如下字样时,编译成功
#### build completed successfully ####
四、启动模拟器
如果中途关闭了终端,需要重新执行source build/envsetup.sh 和lunch命令才能启动模拟器
emulator
五、真机烧录
这里我采用的真机是 Pixel 一代,目前这款手机可以一直升级到 Android 10,注意在选择真机的时候,一定要问清楚BootLoader是否可解锁!同时真机烧录之前,需要将对应设备的 驱动 一同编译进去,否则将设备将变成一块板砖!设备的驱动需要到 官网 上找对应的 手机型号 和 Android 版本 的驱动!之后就可以开始编译安装了,过程比较简单,网上很多不再赘述,可参见 pixelXL 下载编译源代码刷机烧录记录
- 进入bootloader 模式并解锁
adb reboot bootloader
解锁手机:sudo fastboot flashing unlock
- 烧录系统之前,先双清一下
sudo fastboot erase cache
sudo fastboot erase userdatas
- 刷入系统镜像
// 进入Android编译产生的文件 /out/target/product/marlin 执行如下命令
sudo fastboot flashall -w
有时上述命令可能会出问题,可以采用如下方式单个刷入
sudo fastboot flash boot_a boot.img
sudo fastboot flash boot_b boot.img
sudo fastboot flash system system.img
sudo fastboot flash system_b system_other.img
sudo fastboot flash vendor vendor.img
sudo fastboot flash userdata userdata.img
- 重启设备
sudo fastboot reboot
六、Google底包镜像系统
这里简单提一下怎么烧录Google官方的镜像底包,打开 镜像底包 链接,找到对应设备对应版本号系统镜像,下载之后解压,可以看到如下文件:
Windows系统上运行 flash-all.bat ,Linux系统上运行flash-all.sh,不过这里如果直接运行可能会出问题,需要做如下修改:
去掉最后一行命令中的 -w 变更如下:
fastboot update image-sailfish-pq3a.190801.002.zip
七、可能出现的问题
- 安装依赖冲突解决
可能是apt的源版本不对,直接在网络上搜寻的apt源大多没有标明ubuntu版本,建议在清华大学镜像源上,选择对应版本的源:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
- 找不到libncurses.so.5之类的库,可采用如下暴力手段:
sudo apt-get install libncurses*
- Running an x86 based Android Virtual Device (AVD) is 10x faster
出现如上问题,意思是使用一个x86的模拟器比使用arm内核的要快10倍,建议换成内核为x86的模拟器,否则模拟器启动、运行都会比较慢,可能会等待几分钟才能启动