Android源码编译并刷机记录
仅以此文用来记录安卓源码编译成功时的一些经验和心得,并将成功编译的 android-10.0.0_r17,pixel3的userdebug版本置于GitHub。
后续会有关于源码魔改角度出发的Frida持久化,整体壳和抽取壳脱壳相关的内容,敬请期待。
资源省流
编译成果:https://github.com/C0raxx/AndroidCompile/blob/main/Android10/Android10Original/DownLoadUrl
编译环境(初始版,仍需配置):https://github.com/C0raxx/AndroidCompile/blob/main/Android10/CompileEnv/DownLoadUrl
没有配上很多图,因为成果测试的时候没截下来,但可以确定地是按照下面的来,基本上都是可以成功编译的。
1.虚拟机环境配置
VMware版本:17Pro
虚拟机版本:Linux ubuntu 5.15.0-117-generic #127~20.04.1-Ubuntu SMP Thu Jul 11 15:36:12 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
虚拟机硬盘:1T
虚拟机内存:16G
虚拟机处理器:8个
因为我整个教程是跟着小肩膀师傅的课程做的,初始环境(无源码无as无clion)也是用的他给的20.04。
网络配置
桥接模式 使用真实网卡,可以与主机和外网通讯,有独立ip地址
NAT模式 使用VMnet8网卡,可以与主机和外网通讯,不占用ip地址
Host-only 使用VMnet1网卡,只能与主机通信
我们一般情况下用桥接模式了,因为很多时候用的清华源,宿主机开着代理,我这边进行编译的时候就会被墙。桥接模式下我只要更改主机的代理设置即可,更加方便。
2.初始化包的下载与解压
mkdir ~/bin
cd ~/bin
wget https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar
md5sum aosp-latest.tar
tar xvf aosp-latest.tar
这里注意下载好之后记得拿md5sum算一下值做校验,访问https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar.md5即可得到你下载的这个初始化包的md5。
这个初始化包更新频率还是挺高的,但是访问我给的url就可以得到最新包的md5。
3.配置git
sudo apt-get install git
git config --global user.email xxxxxxx@qq.com
git config --global user.name "corax"
这一步下载好git,并配置了邮箱。主要是后面进行repo的时候需要这个邮箱。
4. 下载repo
echo "PATH=~/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install curl
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'
cd aosp
这也没啥好讲的,一样操作就行,我没遇到什么报错。
5.修改默认Python
ubuntu内置的python是python2下的某个版本,编译的话我们选择3.8,是已知能成功的。我这之前下过3.8了,没下过的下一下,也挺方便。
然后
sudo unlink /usr/bin/python
sudo ln -s /usr/bin/python3.8 /usr/bin/python
后面我们执行python就是python3.8进行解释编译了。
6.同步指定版本源码
先有一个问题,我们需要啥版本的源码呢?我们参考下面的url
https://source.android.com/docs/setup/about/build-numbers?hl=zh_cn
比方说我们要编译源码之后放在pixel3上面运行,那我们就搜pixel 3,注意不能是pxiel3xl等等。

我们需要安卓10的,就往下,尽量找个适配版本多的,后续不用再同步了。
就用这个

现在选好版本了,但是还不能做同步的初始化,因为repo需要以下设置,这个我也踩过坑,这里直接避过去。
cd ~/bin/aosp/.repo/repo
git pull
cd ~/bin/aosp
然后再
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r17
repo sync
这里也会比较长时间,耐心等待吧。
7.安装JDK8
其实到这里,源码下载就ok了,到源码编译的准备了。
首先重要的就是JDK的安装,安卓10用JDK8就ok
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
8.安装依赖
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig libncurses5
9.设备驱动准备
进行到这里我们下载的源码里面缺少一个文件就是,vendor。
我们编译出一个安卓系统之后还需要在手机上运行,而手机上的硬件需要驱动来进行使用,这一步就是咱们把驱动进程进源码环境,让它后面编译的时候直接用。
https://developers.google.com/android/drivers
我们直接用上面的编号搜

找到这个

两个下载下来
然后释放进aosp,也就是如下目录

解压出来两个sh,运行它
./extract-google_devices-blueline.sh
./extract-qcom-blueline.sh
ok
10.编译源码
source build/envsetup.sh
lunch
//这里选择要进行编译的版本
//关于设备代号百度一下就可以 比如pixel3就叫blueline
//然后选择编译版本 userdebug eng user
//userdebug 调试版本 我们用这个
//eng 工程版本
//user 发行版本
//可能编译的时候看不到 除了userdebug的其他选项,这个需要进行设置,但我们要userdebug,暂且不管
make -j8
编译过程中会碰到一些警告这都没事,只要不停都是ok的。
如果你不是改变需要运行的设备,比如从pixel3到pixel5,那都不需要make clean。改了源码直接就make上了。
若途中意外退出,继续make即可。
11.刷机包下载
刷机方式的分类
线刷 官方包(刷的比较彻底,可以刷bootloader、radio)
卡刷 lineage os(双清)
线刷包/工厂镜像包
OTA全量包/OTA增量包
我们讨巧一点,直接用原版的刷机包
https://developers.google.com/android/images
用编号搜


下载下来解压
12.刷机包替换
咱们就直接打开里面的这个

然后看里面有啥东西,直接从编译出来的东西里面拖出来,复制进去(这里不要解压缩再添加压缩文件)

在这,拖出来,然后复制进去。看到时间变新即可。(我这已经拖过了)

13.刷机
直接傻瓜式
先脸上手机
adb reboot bootloader
进入bootloader然后点下面这个bat,精心等待即可。
