阅读需 3 分钟

【AOSP】源码编译

清晰记得许多年前编译 aosp 源码时,配置环境十分头疼。如今因为项目需要再次编译时,发现已经如此简单了。

01. 环境

这里以 Windows 系统,安装 VMware 运行 Ubuntu 虚拟机为例。

创建虚拟机:

创建虚拟机步骤参考:VMware虚拟机搭建Ubuntu

Ubuntu: 22.04
Android: android-14.0.0_r29
内存: 24G
硬盘: 300G
交换: 16G

注: 若重新设置磁盘空间在 VMware 虚拟机设置后,还需要在 Ubuntu 中使用 GParted 进行格式化配置(具体用法咨询 GPT)

安装必要的软件包:

sudo apt update
sudo apt upgrade
sudo apt 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 ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

配置Git账号:

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

02. 下载代码

Android 代码是通过 repo 统一获取的,由于 repo 的 git 库需要外网访问,这里统一使用清华镜像服务。

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

# 注意:将下载的 repo 文件中的内容
# REPO_URL = "https://gerrit.googlesource.com/git-repo"
# 改成清华镜像库
# REPO_URL = "https://mirrors.tuna.tsinghua.edu.cn/git/git-repo"
# 否则 repo 依旧会去外网获取 git 库

安装依赖库。

mkdir aosp
cd aosp

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 python3 android-sdk-platform-tools-common openjdk-17-jdk

为了防止在编译过程中出现内存不足的情况,修改交换内存:

sudo swapoff /swapfile
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

初始化对应分支的仓库:

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

同步源码:

repo sync -j8

03. 编译

初始化编译环境:

source build/envsetup.sh

选择编译类型:

lunch
# 如果没有弹出选项菜单,则需要执行如下命令后再试
export TARGET_RELEASE=ap1a
build_build_var_cache

# 执行正常会出现以下选项可供选择
# You're building on Linux

# Lunch menu .. Here are the common combinations:
# 1. aosp_arm-trunk_staging-eng
# 2. aosp_arm64-trunk_staging-eng
# ...

lunch 2

开始编译:

make -j8

编译后出现如下错误:

build/make/core/release_config.mk:109: error: No release config found for TARGET_RELEASE: trunk_staging. Available releases are: ap1a

# 在 build/make/core/release_config.mk 文件头部加上 TARGET_RELEASE := ap1a