Android Framework | AOSP源码下载及编译指南(基于Android13)

Android Framework | AOSP源码下载及编译指南(基于Android13)

引言

AOSP(Android Open Source Project)是Android操作系统的开源项目,通过下载和编译AOSP源码,您可以获得原始的Android系统,并进行定制和开发。本教程将向您介绍如何下载AOSP源码并进行编译的步骤。

如何只是浏览查看AOSP源码,则没必要下载源码,可以使用google提供的Code Search工具进行浏览查阅,这个工具用起来堪比IDE,并且非常流畅,但是访问这个站点需要翻墙操作。

https://cs.android.com/

下载AOSP源码之前,你需要具备一定的Linux基础知识及git、repo等工具的使用经验。

准备工作

  1. 确保您的计算机符合以下要求:

    • 操作系统:Linux(推荐使用Ubuntu)、macOS或Windows(需要使用WSL),官方文档使用的Ubuntu LTS 版本中进行开发和测试,所以最好是在Ubuntu TLS版本环境下进行开发
    • 内存:建议至少16GB RAM
    • 存储空间:建议至少200GB可用空间,只下载源码可能200G,如果需要编译源码则建议至少500G空间
  2. 安装所需软件:

    • JDK(Java Development Kit):确保安装JDK 8或更高版本。
    • Git:用于从AOSP仓库下载源代码。
    • Repo:用于管理多个Git仓库的工具。

下载AOSP源码

AOSP的代码托管在Google的Git服务器上,但由于一些普遍已知的原因,国内用户无法直接访问。为了方便快速地下载代码,我们可以使用清华大学提供的镜像源进行访问。

使用清华镜像源的方法很简单,只需要访问

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

网站即可获取相关说明和使用方法。

  1. 创建一个工作目录,用于存储AOSP源代码。打开终端或命令提示符窗口,并执行以下命令:
bash 复制代码
   mkdir AOSP
   cd AOSP
  1. 初始化Repo工具。执行以下命令:
bash 复制代码
   repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

这里会提示无法连接到 http://gerrit.googlesource.com,需要我们修改一下bash的环境变量,然后重新初始化仓库。

bash 复制代码
$ echo `export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'` >> ~/.bashrc 
$ source ~/.bashrc 
$ repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

出现如下提示,说明仓库初始化成功。

  1. 同步源码。执行以下命令:
bash 复制代码
   repo sync
  1. 等待源码同步完成。这可能需要一段时间,取决于您的网络连接和计算机性能。

配置编译环境

  1. 进入AOSP源码目录。执行以下命令:
bash 复制代码
   cd <path-to-aosp>
  1. 配置编译环境。执行以下命令:
bash 复制代码
   source build/envsetup.sh
  1. 选择目标设备。执行以下命令:
bash 复制代码
   lunch
  1. 在菜单中选择目标设备的编号,并按Enter键确认。

开始编译

  1. 执行以下命令开始编译整个AOSP源码:
bash 复制代码
   make -j<number-of-cores>
  • <number-of-cores>是您计算机处理器核心数的数字。例如,如果您的计算机有4个核心,则可以使用make -j4
  1. 等待编译完成。这可能需要几个小时,取决于您的计算机性能。

步骤五:获取编译后的系统镜像

  1. 编译完成后,在AOSP源码目录中执行以下命令以获取系统镜像:
bash 复制代码
   cd <path-to-aosp>
   out/target/product/<device-name>/
  1. 在该目录下,您将找到生成的系统镜像文件。

AOSP源码查看

前面说了,如果不涉及开发调试,只限阅读源码,那么直接访问下面网址就够了。这是Google为Android开发的Code Search在线工具,体验堪比IDE。

https://cs.android.com/

Android Studio导入

如果需要在本地开发调试,那么使用AS导入源码,执行下面命令会在AOSP源码根目录下生成android.iprandroid.imlandroid.iws三个文件,使用Android Studio导入android.ipr文件即可导入AOSP源码。

bash 复制代码
$ cd ~/aosp
$ source build/envsetup.sh
$ mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh

另外,导入AOSP源码体积庞大,你需要修改AS的jvm参数

另外Android Studio建议使用JetBrains的ToolBox进行管理,避免因为修改配置导致AS无法升级的问题。

aidegen工具

Google在Android11之后提供了aidegen工具,可以针对AOSP源码的特点,针对某个模块生成ide配置,这样导入后可自动完成依赖配置,符号依赖可以随意跳转。

厂商AOSP

对于拿到了厂商AOSP源码来说,编译调试更容易了,一般厂商都提供了集成好的脚本,直接执行脚本就可以执行编译打包能力,例如Rockchip、高通、MTK等都有集成好的脚本进行编译打包。例如笔者在基于Rockchip平台开发时,有build.sh脚本可调用:

bash 复制代码
#!/bin/bash
usage()
{
   echo "USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]  "
    echo "No ARGS means use default build option                  "
    echo "WHERE: -U = build uboot                                 "
    echo "       -C = build kernel with Clang                     "
    echo "       -K = build kernel                                "
    echo "       -A = build android                               "
    echo "       -p = will build packaging in IMAGE      "
    echo "       -o = build OTA package                           "
    echo "       -u = build update.img                            "
    echo "       -v = build android with 'user' or 'userdebug'    "
    echo "       -d = huild kernel dts name    "
    echo "       -V = build version    "
    echo "       -J = build jobs    "
    echo "       -B = build AB Image                              "
    exit 1
}

例如,可执行下面命令编译android、kernel、boot及打出update.img包

bash 复制代码
./build.sh -UKAu

通过本教程,您学会了如何下载AOSP源码并进行编译。现在,您可以根据需要进行自定义和开发,定制您自己的Android系统。请注意,AOSP编译过程可能需要一些时间和计算机资源,建议在充足的时间和性能条件下进行操作。

相关推荐
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android