首页 分享 AOSP编译记录

AOSP编译记录

来源:花匠小妙招 时间:2024-12-14 14:23

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的过程。

配置环境

配置git 下载git

sudo apt install git 配置git

git config --global user.email "电子邮件地址"git config --global user.name "名字" 下载repo工具

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

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo 安装编译所需的软件包

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。其它版本安装命令,参考文档

同步代码

创建工作目录

mkdir AOSPcd AOSP 初始化仓库

以下二选一:
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

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

同步代码

repo sync

开始同步代码...

sync code

驱动安装

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

下载对应驱动

这里,我使用的设备型号为 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根目录下。

安装驱动

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

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

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

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

编译系统

使用 envsetup.sh 脚本初始化环境

source build/envsetup.sh

或者

. build/envsetup.sh

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

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

hmm 选择目标

使用 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 默认处于启用状态。 构建代码

使用 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 hardwarePRODUCT_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 刷机

相关知识

加快编译速度(一)
与《疫苗学》中文版编译团队一起,加入这场疫苗人的“茶话会”吧~
VC6.0常见编译错误提示附解决方法
【C语言】预处理(预编译)详解(上)(C语言最终篇)
keil5编译后生成 Program Size: Code RO
项目过程记录
基于STM32F103C8T6的智能加水(灌溉,浇花,农业)系统 (keil编译+C语言标准库)
下面程序编译时发现ma[3]=9错误,其原因是【 】。 # include<io
安卓9.0新功能曝光:原生支持虹膜识别
【解决问题】python编译报错 Target is multiclass but average='binary'. Please choose another average setting

网址: AOSP编译记录 https://www.huajiangbk.com/newsview1093104.html

所属分类:花卉
上一篇: 花膠食譜、做法
下一篇: 五花肉烧板栗的做法

推荐分享