Android源码编译烧录

一、编译环境/设备

  • 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

二、代码下载

  1. 安装初始化依赖工具
 sudo apt install curl python git
  1. 配置repo工具
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  1. 修改repo默认源,通过国内镜像更新:在~/.bashrc文件里添加如下两行,保存退出,然后执行source ~/.bashrc更新环境变量
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
  1. 配置git信息
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
  1. 初始化仓库
mkdir AOSP
cd AOSP
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
  1. 查看源码分支,选择其一下载
    初始化完成之后,使用 “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
  1. 同步源码
repo sync

三、编译源码

  1. 初始化编译环境,切换到源码根路径下,执行如下命令:
source build/envsetup.sh
  1. 选择编译目标,真机选项见 官方文档
lunch aosp_arm64-eng
  1. 开始编译,可能等待数个小时
make -j12
  1. 当出现如下字样时,编译成功
#### build completed successfully ####

四、启动模拟器

如果中途关闭了终端,需要重新执行source build/envsetup.sh 和lunch命令才能启动模拟器

emulator

五、真机烧录

这里我采用的真机是 Pixel 一代,目前这款手机可以一直升级到 Android 10,注意在选择真机的时候,一定要问清楚BootLoader是否可解锁!同时真机烧录之前,需要将对应设备的 驱动 一同编译进去,否则将设备将变成一块板砖!设备的驱动需要到 官网 上找对应的 手机型号Android 版本 的驱动!之后就可以开始编译安装了,过程比较简单,网上很多不再赘述,可参见 pixelXL 下载编译源代码刷机烧录记录

  1. 进入bootloader 模式并解锁
adb reboot bootloader
解锁手机:sudo fastboot flashing unlock
  1. 烧录系统之前,先双清一下
sudo fastboot erase cache
sudo fastboot erase userdatas
  1. 刷入系统镜像
// 进入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
  1. 重启设备
 sudo fastboot reboot 

六、Google底包镜像系统

这里简单提一下怎么烧录Google官方的镜像底包,打开 镜像底包 链接,找到对应设备对应版本号系统镜像,下载之后解压,可以看到如下文件:

图片.png

Windows系统上运行 flash-all.bat ,Linux系统上运行flash-all.sh,不过这里如果直接运行可能会出问题,需要做如下修改:
去掉最后一行命令中的 -w 变更如下:

fastboot update image-sailfish-pq3a.190801.002.zip

七、可能出现的问题

  1. 安装依赖冲突解决
    可能是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
图片.png
  1. 找不到libncurses.so.5之类的库,可采用如下暴力手段:
sudo apt-get install libncurses* 

  1. Running an x86 based Android Virtual Device (AVD) is 10x faster
图片.png

出现如上问题,意思是使用一个x86的模拟器比使用arm内核的要快10倍,建议换成内核为x86的模拟器,否则模拟器启动、运行都会比较慢,可能会等待几分钟才能启动

你可能感兴趣的:(Android源码编译烧录)