使用brew安装repo工具后,通过repo init初始化Android源码仓库(指定分支如android-13.0.0_r1),repo sync同步代码。进入源码目录执行envsetup.sh配置环境,lunch选择目标设备类型。使用make命令编译系统镜像,支持全系统编译或单独组件编译。生成的镜像文件位于out/target/product/设备名/目录下,可通过emulator启动模拟器或fastboot刷入真机运行。整个过程实现了从源码下载到编译运行的完整流程。

博主博客

一、Repo

1.1 使用 brew 安装 repo

brew install repo

1.2 repo 常用命令

repo start <topic_name>

开启一个新的主题,其实就是每个Project都新建一个分支。

repo manifest

可以根据当前各Project的版本信息生成一个manifest文件。

repo sync [PROJECT1...PROJECTN]

同步Code。

repo status

查看本地所有Project的修改,在每个修改的文件前有两个字符,第一个字符表示暂存区的状态。

repo prune <topic>

删除已经merge的分支。

repo abandon <topic>

删除分支,无论是否merged。

repo branch或repo branches

查看所有分支

repo diff

查看修改

repo upload

上传本地提交至服务器

repo forall [PROJECT_LIST]-c COMMAND

对指定的Project列表或所有Project执行命令COMMAND,加上-p参数可打印出Project的路径。

repo forall -c 'git reset --hard HEAD;git clean -df;git rebase --abort'

这个命令可以撤销整个工程的本地修改。

二、拉取源码

Android 使用 Git 作为代码管理工具,源码在 Google Git 上面,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理。

2.1 初始化 repo(以 Android 13 为例)

mkdir aosp
cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r1

如果要拉取主分支可以使用

repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest

-b 选项用于标识您正在初始化的分支。如果 -b 未提供,则 repo init 默认采用主分支。如需查看分支和标记名称的列表,请参阅源代码标记和 build

-u 是必需选项,用于指定清单文件。清单是一个 XML 文件,用于指定 Android 源代码中的各种 Git 项目位于工作目录的什么位置。manifest 在此示例中,清单文件的名称未指定,因此命令使用默认清单文件 (default.xml)。

2.2 下载 Android 源码

repo sync -c -j8

-c 参数会指示 Repo 从服务器提取当前的清单分支。-j8 命令会将同步操作拆分成多个线程,以更快地完成同步。

此操作应该需要一小时多一点的时间。

如果您在下载期间遇到任何问题,请参阅排查并解决同步问题

三、配置编译环境

进入源码目录:

source build/envsetup.sh

选择目标设备(如 aosp_x86_64 或 Pixel 设备):

lunch aosp_x86_64-eng

如果是厂商平台(如 Qualcomm 或 MTK),请使用对应的 lunch target。

四、开始编译

编译系统镜像:

make -j$(nproc)

常用组件单独编译:

make SystemUI
make framework
make services

五、输出结果

编译完成后,生成的镜像通常位于 out/target/product/<device>/ 目录中,如:

  • system.img
  • boot.img
  • userdata.img

你可以使用 fastboot 或模拟器加载运行:

emulator

或使用 fastboot flash 命令刷入真机。

参考文献