AOSP编译

658 阅读3分钟

0 准备

目前官方只支持linux系统进行编译,官方建议使用ubuntu,本文使用ubuntu22 LTS。

编译需要安装下面的工具

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

官网参考:source.android.google.cn/docs/setup/…

使用wsl注意事项

如果你在wsl2里面编译AOSP,一定要记得先把文件夹设置为区分大小写的,修改命令如下,需要管理员运行powershell执行

fsutil file SetCaseSensitiveInfo D:\xxxx\AOSP enable

否则等几十个G的代码下载好之后,会出现下面的情况 image-20230110145712090.png

万一像我一样代码下载好了却因为大小写问题无法编译,可以新建一个文件夹并设置为大小写敏感,然后把之前的代码复制过来,必须要复制才能继承文件夹的大小写敏感标记。

之后可以设置一下wsl的内存,我这里默认是机器的一半(机器32g),编译时会提示内存不够。新建一个文件c:\user\<username>\.wslconfig,写入下面的内容

[wsl2]

memory=32GB

之后重启wsl

wsl --shutdown

注:不建议用wsl,用vmware虚拟机快很多,wsl有些操作要卡很久,应该不是性能问题,没搞懂为什么。

1 安装repo

ubuntu可以直接apt install repo

不用代理的话,建议看下清华源的说明,在~/.bashrc里面添加环境变量

mirrors.tuna.tsinghua.edu.cn/help/git-re…

2 初始化

确认repo正常后,自己建个文件夹,进去执行下面指令初始化仓库

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r34

其中的android-12.0.0_r34需要根据自己的手机型号来选择,否则会出现驱动不支持,某些功能不能使用的情况,手机型号对应的安卓源码版本号见:source.android.com/docs/setup/…

在页面上搜索机型,如pixel 3,第二列就是源码版本号

image-20230109161256160.png

3 下载代码

repo sync -j4

按照清华源官方文档的说明,建议用4并发

mirrors.tuna.tsinghua.edu.cn/help/AOSP/

4 安装对应驱动

谷歌官方驱动地址:

developers.google.cn/android/dri…

在第二节初始化的时候,记住源码版本号前面的SP1A.210812.016.C2 image-20230110141937265.png

搜索对应的驱动,下载下来解压到AOSP根目录并直接执行 image-20230110142132660.png

5 开始编译

//设置环境
source build/envsetup.sh

//每次编译前建议先执行这个清除历史编译残留数据
make clobber

//选择构建版本
lunch

//开始编译,会按照你cpu的核心数自动选择并发数,也可以-j设置
m

其中选择构建版本时,会出现一个版本列表,如下图 image-20230110143838562.png

前缀一般选自己手机型号,比如aosp_blueline。后缀分为eng, userdebug, user, 可以自行搜索区别,前两个都自带root,eng去掉了一些优化操作,输出数据更多,但是性能会差点,所以我这里选userdebug够用。

6 刷机

编译完成后,设置输出目录的环境变量

export ANDROID_PRODUCT_OUT=/xxx/xxx/AOSP/out/target/product/blueline

AOSP是源代码根目录,最后的blueline是手机型号,根据实际情况自己改

之后连上手机,执行下面命令,adb和fastboot命令在ubuntu里面可以直接apt安装

adb reboot bootloader	//进入bootloader
fastboot flashall -w	//开始刷入镜像,-w是清除所有数据

-w指令按理说可以不加,但是我不加刷完之后,手机开机是黑屏(只有屏幕黑的,adb都能正常连接),之后加上-w再次刷了一次,就正常了。