记一次AOSP编译记录

记一次编译Android 开源项目 (Android Open Source Project) 的过程。

搭建构建环境

根据谷歌-搭建构建环境部分的描述,需要使用Linux环境。

这里,我使用的是VM创建了Ubuntu18.04的虚拟机。

Ubuntu18.04镜像的下载链接

注:我配置的虚拟机为12核/64G,实测编译耗时为2小时11分钟。

硬件要求

您的开发工作站必须达到或超出以下硬件要求:

  • 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。

  • 如果要检出代码,至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多次构建,则需要更多空间。

  • 至少需要 16 GB 的可用 RAM,但 Google 建议提供 64 GB。

注意:如果您要检出镜像,就需要更多空间,因为完整的 Android 开源项目 (AOSP) 镜像包含所有使用过的 Git 代码库。

从 2021 年 6 月起,Google 使用 72 核机器,内置 RAM 为 64 GB,完整构建过程大约需要 40 分钟(增量构建只需几分钟时间,具体取决于修改了哪些文件)。相比之下,RAM 数量相近的 6 核机器执行完整构建过程需要 3 个小时。

软件要求

AOSP 分支历来都是在 Ubuntu 长期支持 (LTS) 版本中进行开发和测试,但也可以使用其他分发版本。如需了解所需的其他软件包以及用于安装这些软件包的命令,请参阅搭建构建环境。

工作站必须具有下面列出的软件。这些要求适用于 AOSP master 分支。对于 Android 5.0 版(Lollipop 或 L)到 Android 8.0 版(Oreo 或 O),请考虑使用随附的 Dockerfile,以简化所有必需软件包的安装。

操作系统
如果您要针对 AOSP master 分支进行开发,请使用 Ubuntu 18.04 (Bionic Beaver)

注意:自 2021 年 6 月 22 日起,谷歌已不再支持在 Windows 或 MacOS 上进行构建。

编译步骤

以下为在Ubuntu18.04上编译Android 11的过程。

配置环境

  1. 配置git
  • 下载git
sudo apt install git
  • 配置git
git config --global user.email "电子邮件地址"
git config --global user.name "名字"
  1. 下载repo工具

repo工具就是一堆python脚本的集合,调用git命令去clone代码,所以要保证git先配置好。

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  1. 安装编译所需的软件包
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

注意:不同Ubuntu版本有所不同,此处是Ubuntu18.04。其它版本安装命令,参考文档

同步代码

  1. 创建工作目录
mkdir AOSP
cd AOSP
  1. 初始化仓库

以下二选一:
A:
使用清华大学镜像站

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

B:
使用谷歌的镜像

repo init -u https://android.googlesource.com/platform/manifest

如需签出 master 分支,请运行以下命令:

repo init -u https://android.googlesource.com/platform/manifest -b master

此处,由于我需要Android11的版本,因此,输入命令修改为如下内容

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

其它版本,参考源代码标记按需修改上述命令即可。

  1. 同步代码
repo sync

开始同步代码…

sync code

驱动安装

若使用模拟器,则可跳过此步骤。

  1. 下载对应驱动

这里,我使用的设备型号为 pixel 4,AOSP版本为11.0.0_r41。

驱动下载链接如下:

https://developers.google.cn/android/drivers?hl=zh-cn#flamerq3a.211001.001

找到对应版本号的驱动,下载得到

  • google_devices-flame-rq3a.211001.001-649f84da.tgz

  • qcom-flame-rq3a.211001.001-9f0ccb39.tgz

将其解压得到两个*.sh文件,将其拷贝至ubuntu中对应的AOSP根目录下。

  1. 安装驱动

执行extract-qcom-flame.sh和extract-goole_devices-flame.sh两个文件。

生成以下两个目录,且其中包含了相关镜像

  • AOSP根目录/vendor/google_devices
  • AOSP根目录/vendor/qcom

注意:在AOSP(11.0.0_r41)编译flame(Pixel 4) 时有坑,后文有做记录。

编译系统

  1. 使用 envsetup.sh 脚本初始化环境
source build/envsetup.sh

或者

. build/envsetup.sh

envsetup.sh 脚本会导入若干命令,让您能够使用 Android 源代码,其中包括本练习中使用的命令。

如需查看可用命令的完整列表,请运行以下命令:

hmm
  1. 选择目标

使用 lunch 选择要构建的目标。lunch product_name-build_variant 会选择 product_name 作为需要构建的产品,并选择 build_variant 作为需要构建的变体,然后将这些选择存储在环境中,以便供后续对 m 和其他类似命令的调用读取。

确切的配置可作为参数进行传递。例如,以下命令表示针对模拟器进行完整构建,并且启用所有调试功能。

$ lunch 
#或也可以直接选择 
$ lunch aosp_arm-eng
#或也可以直接选择序号 
$ lunch 1

执行lunch后,输入序号选择构建目标

列表

相关后缀说明:

  • user:限制所有权限,用于发布给用户使用的最终版本。
    • 安装带有 user 标记的模块。
    • 除了带有标记的模块之外,还会根据产品定义文件安装相应模块。
    • ro.secure=1
    • ro.debuggable=0
    • adb 默认处于停用状态。
  • userdebug: 开放部分权限,允许root。
    • 还会安装带有 debug 标记的模块。
    • ro.debuggable=1
    • adb 默认处于启用状态。
  • eng:工程师模式,开放所有权限并且有额外的调试工具。
    • 安装带有 eng 或 debug 标记的模块。
    • 除了带有标记的模块之外,还会根据产品定义文件安装相应模块。
    • ro.secure=0
    • ro.debuggable=1
    • ro.kernel.android.checkjni=1
    • adb 默认处于启用状态。
  1. 构建代码

使用 m 构建所有内容。m 可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择您认为最适合您系统的并行任务计数。

make -j12

开始构建

开始编译

经过漫长的等待,编译完成

构建完成

注:本次编译是一次过,中途未出现其它问题。

可能需要注意的地方

  • 同步代码时确保网络稳定,以免文件遗失
  • 编译产物较多,确保磁盘空间足够

刷机

进入bootloader,在AOSP根目录执行命令

注:需在“. build/envsetup.sh”后执行

fastboot flashall -w

踩坑记录

编译AOSP时报错

报错信息:

FAILED: ninja ‘vendor/qcom/coral/proprietary/com.qualcom.qcrilmsgtunnel.xml’, needed by ‘out/target/product/flame/system_ext/ext/permissions/com.qualcomm.qcrilmsgtunnel.xml’ …

问题原因:

找不到vendor/qcom/coral/proprietary/com.qualcom.qcrilmsgtunnel.xml

分析:

pixel4对应的是“flame”,此处出现了代号“coral”

修改:

找到“AOSP根目录/vendor/qcom/flame/proprietary/device-partial.mk”文件,将“coral”修改为“flame”

#  blob(s) necessary for flame hardware
PRODUCT_COPY_FILES := \
... vendor/qcom/flame/proprietary/com.qualcomm.qcrilmsgtunnel.xml:system_ext/etc/permissions/com.qualcomm.qcrilmsgtunnel.xml \
...

刷机后卡开机画面

我的设备在此前刷了Android13的原厂镜像,刷AOSP(11.0.0_r41)时未执行“fastboot -w”清除数据,在开机时卡在开机动画界面。

执行"fastboot -w" -> "fastboot flashall”重刷后解决

参考链接

谷歌官方构建文档

清华大学开源软件镜像站

Andorid镜像使用帮助

从头搭建Android源码编译环境(Ubuntu 18.04 / 20.04 / 22.04)

Android源码开发篇(一)9.0/10.0/11.0源码下载 编译 刷机

android 11源码编译 + pixel3 刷机

### 编译 Android 13 AOSP 源码 #### 准备工作环境 为了顺利编译 Android 13 的 AOSP 源码,建议在一个干净的 Ubuntu 20.04 LTS 环境中操作。确保已经安装了必要的依赖包和工具链[^3]。 ```bash sudo apt-get update && sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig ``` #### 安装 Repo 工具并初始化仓库 Repo 是 Google 开发的一个 Python 脚本,用于管理多个 Git 项目。通过它可以从 GitHub 或其他托管服务获取整个 Android 源树。 ```bash mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo ``` 创建一个新的文件夹来保存源代码: ```bash mkdir ~/aosp cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_rXX # XX代表具体的修订版本号 repo sync --no-tags --no-clone-bundle ``` #### 配置构建环境变量 进入源码根目录设置环境变量以便后续命令能够正常执行: ```bash source build/envsetup.sh lunch aosp_arm-eng ``` `lunch` 命令会配置一系列默认参数,其中 `eng` 表示开发者模式,适合调试;而 `userdebug` 则介于两者之间,更接近生产环境但仍保留一些日志输出功能[^1]。 #### 执行实际编译流程 当一切准备就绪后就可以启动编译过程了。这一步可能耗时较长取决于机器性能以及网络状况等因素影响。 ```bash m -j$(nproc) ``` 上述指令利用多线程加速编译速度(`-j`)选项指定了使用的 CPU 核心数,通常设为当前系统的最大核心数量可以加快进度[^4]。 #### 获取编译成果 一旦编译顺利完成,最终生成的镜像文件将会位于 `out/target/product/<device>/` 文件夹内,具体路径视所选设备型号不同有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EQ-雪梨蛋花汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值