Android AOSP 之下载编译

237 阅读2分钟

一.必备工具

必须先安装 OpenJDK、Make、Python 3 和 Repo,然后才能使用 AOSP。Android 的 AOSP 主分支附带预构建版本的 OpenJDK、Make 和 Python 3,因此不需要额外的安装步骤。下一部分介绍了如何安装 Repo。

** 1.安装repo**

   sudo apt-get update
   sudo apt-get install repo(正常情况下,安装成功了,如果失败了,尝试手动安装)
   (手动安装步骤如下)
   /*****/
   {export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
    curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
    gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
    curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
   }
   /*****/
   repo version(验证版本)

2.下载源码

    cdmkdir aosp
    cd aosp
    (初始化代码主分支)
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
(前提是拥有git认证凭据)
repo sync -c -j8(同步代码,j8 只是根据你线程数进行的配置,配置越高,下载时间越短)
(至此,源码下载完成,当然,如果你没有翻墙工具的话,需要使用国内的镜像下载,也就是需要替换掉出实话代码主分支的下载链接,比如阿里镜像)

3.构建代码

设置构建环境 
    source build/envsetup.sh
使用 lunch 命令指定要构建的目标设备类型。**目标是指设备组合,例如特定型号或外形规格。 指定此目标:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
(此处需要注意的是,要制定的型号和规格,选择适合自己的型号和规格,型号规格选择类型可以通过)
如上命令拆解如下:
`lunch` 的选项通常为 `device-buildtype` 组合,例如 `aosp_pixel-eng`
`device`**​:目标设备的代号(如 `aosp_pixel`、`sdk_phone_x86_64`)。
`buildtype`**​:构建类型(如 `eng`、`userdebug`、`user`)

查看所有设备的命令是lunch
### **构建类型(Build Variant)​**

-**`eng`**​(Engineering Build):

-**用途**​:开发调试版本,包含 root 权限、调试工具(ADB、Logcat)、性能分析工具。
-**特点**​:性能较低(启用调试),适合开发者。

-**`userdebug`**​(User Debug Build):

-**用途**​:测试版本,保留部分调试功能(如 ADB),但去除非必要工具。
-**特点**​:平衡性能与调试,适合测试团队。

-**`user`**​(User Build):

-**用途**​:正式发布版本,禁用所有调试功能,优化性能。
-**特点**​:无 root 权限,适合最终用户。

* * *
输出示例:
You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_pixel-userdebug
     4. aosp_x86_64-eng
     ...(更多选项)
选择推荐:
lunch aosp_pixel-userdebug    # 编译 Pixel 设备的 userdebug 版本
lunch sdk_phone_x86_64-eng    # 编译 x86 模拟器的 eng 版本

模拟器镜像
lunch sdk_phone_x86_64-eng   # 64 位 x86 模拟器
lunch aosp_arm-eng            # ARM 模拟器(低性能设备)

   最后构建目标 使用 make或m 命令,大概需要几个小时的时间编译完成(需要注意的是,最好采用linux系统进行编译)