背景
AOSP作为最伟大的Android开源项目,绝对值得系统开发者和移动安全人员学习,许多Android的脱壳机也是基于修改定制镜像来完成脱壳,因此熟悉AOSP是很有必要的。
目标
完成aosp源码编译,刷入到真机设备
设备环境
ubuntu20.08
pixel
一、环境配置
Git
程序员必备,配置好邮箱和用户
repo
Google发布的专门管理Android代码的工具,AOSP由成千上万个Git项目构成,repo就是负责管理这些众多Git库的。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
java
sudo apt-get update
sudo apt-get install openjdk-8-jdk
python
sudo apt-get install python
二、源码下载
2.1 aosp源码下载
国内使用清华源下载aosp镜像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
方式一:
curl -OC - https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
#初始化manifest仓库,并且指定分支tag,详细版本和tag关系可查https://source.android.com/docs/setup/about/build-numbers#source-code-tags-and-builds
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-4.0.1_r1
# 代码同步,从仓库拉取代码,如果嫌慢可以repo sync -c -j8,只同步当前branch,开8个线程
repo sync
方式二(传统方式):
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-4.0.1_r1
repo sync
2.2 二进制驱动程序下载
目标设备驱动下载,后续编译需要,build id要对应,https://developers.google.cn/android/drivers
三、编译
3.1 编译依赖库安装
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 libssl-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
sudo apt-get install libncurses5
sudo apt-get install libpng-dev
sudo apt-get install libssl-dev
sudo apt-get install libswitch-perl
3.2 二进制驱动执行
解压上面下载的两个驱动文件,是两个shell脚本,放到aosp工程主目录下执行:
sh extract-qcom-sailfish.sh
sh extract-google_devices-sailfish.sh
3.3 lunch环境配置
lunch选择构建目标设备
可以执行lunch后根据提示选择设备(不全)
也可以根据实际目标设备和需求命令,格式lunch product_name-build_variant,具体见官方详细指导choose-a-target,https://source.android.com/docs/setup/build/building#choose-a-target
lunch #选择对应序号
或者
lunch aosp_sailfish-user
这里build_variant有三种模式:
- user:用户版本,发布给用户使用的镜像版本,系统最小权限。
- userdebug:用户版本加入了root访问,调试能力。
- eng:工程师版本,关闭了一些优化,有额外的调试工具。
3.4 编译
根据电脑性能配置开多个线程配置
make -j24
四、刷机
设备进入bootloader并且已解锁,刷编译好的镜像
adb reboot bootloader
fastboot flashall -w
参考
https://source.android.com/docs/setup/download/downloading google官方指导aosp下载
https://source.android.com/docs/setup/build/building google官方指导aosp构建
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 清华源指导aosp构建