本文基于编译Android 12的流程编写,编译早期版本的Android需要的依赖和过程可能不同(如所需要的内存容量,是否需要额外安装JAVA等)。
准备
设备要求
编译Android 12建议至少需要32G的物理内存和200G左右的硬盘空间用来存放源码和编译产物。如果没有那么多的物理内存,也可以考虑采用16G的物理内存加上约12G的swap来保证满足编译需求。关于硬盘,使用SSD存放源码的编译速度肯定会比HDD快上不少,选择什么主要还是看自己的条件。
至于系统,那一般的Linux都是可以的。
安装依赖
如果你和我一样使用的是ArchLinux或者基于Arch并同样采用pacman包管理器的Manjaro,那么你只需安装打包好的元软件包aosp-devel
以及lineageos-devel
(即便是编译基于AOSP的rom也建议安装此包,因为设备树中的内容可能会需要此依赖)即可。
如果是Ubuntu或是其他采用apt和其他包管理器的系统,则需要分别安装以下软件包:bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
。
配置构建环境
新建文件夹
mkdir exthmui
,创建一个文件夹,用于存放源码。
安装repo工具
同样的,如果你是ArchLinux,只需安装aur包yay repo
即可。其他系统的话手动下载安装,参考:
1 | curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo |
添加环境变量。
1 | set PATH so it includes user's private bin if it exists |
开启ccache缓存工具加速编译
更改目录为你期望的缓存存储路径。
1 | export USE_CCACHE=1 |
添加以下内容至你的~/.bashrc
或者~/.zshrc
文件来设置缓存大小限制。
1 | ccache -M 50G |
添加如下语句来启用缓存压缩:
1 | ccache -o compression=true |
初始化源码仓库并同步
这里以同步exTHmUI源码为例。
1 | repo init -u https://github.com/exthmui/android.git -b exthm-12 |
也可以使用depth参数限定深度来节省空间。
1 | repo init -u https://github.com/exthmui/android.git -b exthm-12 --depth=1 |
当然,你的机器如果在国内的话,魔法是必不可少的。
准备好设备专用的仓库
为了能够从源码中编译出专用于你的设备的rom,一般还需要三样东西:device tree,kernel以及vendor。
vendor为从设备原厂rom中提取出的闭源二进制文件,如vendor_xiaomi_raphael,device tree即设备树,你可以自己从零开始bring up,不过第一次的话还是先找一个现成的来用,名称格式大概是像这样:device_xiaomi_raphael,同理,内核为kernel_xiaomi_raphael)。
将以上仓库添加进源码根目录的.repo/local_manifests
中的配置文件中后,重新repo sync
,代码就准备好了。
开始编译
1 | . build/envsetup.sh |
如lunch exthm_raphael-userdebug
编译产物会生成在$OUT
中。