乐于分享
好东西不私藏

Android源码下载与编译

Android源码下载与编译
        对于许多安卓开发者而言,Android SDK(软件开发工具包)提供了完善的API(应用程序编程接口),足以构建复杂的应用程序。然而,当你试图深入理解系统的工作原理、进行Framework层开发、或者打造一个属于自己的定制ROM(只读存储器)时,下载并编译安卓开源项目(AOSP,即Android Open Source Project)的源代码就成为了一条必经之路。这个过程不仅能让你获得系统的完整镜像,更能让你亲身体验大型开源项目的构建流程。

本文将带你一步步完成安卓源码的下载与编译。需要注意的是,AOSP的编译是一个对硬件和网络要求极高的过程,通常仅官方支持的Linux环境(如Ubuntu)和Mac OS能够顺利完成,Windows系统下的WSL(Windows Subsystem for Linux)环境也偶有成功案例,但最稳定的依然是原生Linux。因此,本文将主要基于Ubuntu 20.04或22.04 LTS(长期支持版)环境进行介绍。

2 准备工作:环境与硬件要求

2.1 硬件配置

在开始之前,请务必检查你的硬件。安卓源码体量巨大,编译过程也极其消耗资源。硬盘空间是最大的门槛,随着版本的更新,AOSP对硬盘的要求越来越高。对于Android 14等较新版本,官方推荐至少400GB的可用硬盘空间。内存方面,至少需要16GB,但为了更流畅的编译体验,32GB或以上会更为理想。CPU核心数越多,编译速度越快,推荐使用多核处理器。

2.2 软件环境

  • 操作系统:Ubuntu 20.04 LTS 或 22.04 LTS(64位)。

  • 依赖包:需要安装大量编译所需的工具和库。打开终端,执行以下命令安装基础依赖:

    bash

    sudoapt-getinstall git-core gnupg flex bison gperf build-essential zipcurl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

    此外,Python 3和Git也是必须的。

  • JDK(Java开发工具包):不同版本的安卓源码对JDK版本有严格的要求。对于较新的版本(如Android 7.0及以上),通常需要OpenJDK 8或更高版本。你可以通过以下命令安装OpenJDK 8:

    bash

    sudoapt-getinstall openjdk-8-jdk

    安装完成后,可以通过java -version命令确认版本。

3 下载源码:使用Repo工具

安卓源码由数百个Git仓库组成,Google专门为此开发了Repo工具来统一管理这些仓库。Repo本质上是一个基于Python的脚本,它通过一个清单文件(manifest)来协调所有Git仓库的下载与同步。

3.1 安装Repo工具

首先,在主目录下创建一个bin文件夹,并将其添加到环境变量中:

bash

mkdir ~/binPATH=~/bin:$PATH

接着,下载Repo脚本并赋予其可执行权限:

bash

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

如果你的网络环境无法直接访问Google的服务器,可以考虑使用国内的开源镜像站(如清华大学、中国科技大学的AOSP镜像)来下载Repo和源码。

3.2 初始化与同步

创建一个用于存放源码的目录,例如Android

bash

mkdir Andorid
cdAndorid

接下来,需要配置你的Git信息,否则Repo可能无法正常工作:

bash

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

然后,通过repo init命令初始化仓库。你需要指定一个分支(即版本)。例如,要下载Android 14的代码,无外网权限的可以使用清华镜像下载:

bash

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

初始化成功后,执行同步命令开始下载源码:

bash

repo sync -j16

这里的-j16参数表示同时开启16个线程进行下载。你可以根据你的网络带宽适当调整该数字。这个过程耗时较长,可能需要数小时,请耐心等待。

注:下载前最好设置Swap交换空间

# 创建 16GB 交换文件
sudo fallocate -l 16G /swapfile
sudochmod600 /swapfile
sudomkswap /swapfile
sudoswapon /swapfile
# 验证生效free-h

4 编译系统:生成镜像文件

源码下载完成后,就可以开始编译了。这一阶段对环境变量和命令的依赖较强。

4.1 设置编译环境

首先,在源码根目录下执行envsetup.sh脚本。这个脚本会加载一系列编译所需的函数和命令:

bash

source build/envsetup.sh

接下来,使用lunch命令选择编译目标。lunch命令后的参数决定了你要为哪个设备编译以及编译的类型(如user用户版、userdebug调试版或eng工程师版)。例如,要为模拟器编译x86架构的调试版,可以使用:

bash

lunch aosp_car_x86_64-eng

注:我的电脑为x86_64系统,所以选择的目标为aosp_car_x86_64-eng,当电脑系统与构建目标不一致是,emulator是无法启动模拟器的,最好选择与电脑匹配的目标

4.2 开始编译

一切就绪后,直接执行make命令即可开始编译:

bash

make -j16

-j16表示启用16个并行任务进行编译。一般建议将并行任务数设置为CPU核心数的1到2倍。如果是第一次编译,这个过程可能会非常漫长,从几个小时到10个小时不等,具体取决于你的CPU性能。编译成功后,终端会显示make completed successfully的提示,生成的镜像文件位于源码目录下的out/target/product/[设备名]/文件夹中。你可以将这些镜像文件刷入设备或启动模拟器进行体验。

5 启动模拟器

执行emulator
1.模拟器无法启动,ERROR | x86_64 emulation currently requires hardware acceleration!CPU acceleration status: KVM requires a CPU that supports vmx or svm 表明你的虚拟机或物理机没有启用硬件虚拟化支持(Intel VT-x 或 AMD SVM)。
1)VirtualBox:勾选 处理器 -> 启用 VT-x/AMD-V 和 启用嵌套分页。

VMware:勾选 处理器 -> 虚拟化 Intel VT-x/EPT 或 AMD-V/RVI

2)安装KVM
sudoaptinstall qemu-kvm

检查 CPU 虚拟化支持

如果返回大于0 的数字,说明 CPU 支持虚拟化。如果返回0,说明 CPU 不支持,此时只能使用速度较慢的 ARM 模拟器镜像。
此时执行emulator即可启动模拟器