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. 1. 确保您的计算机符合以下要求:

    • • 操作系统:Linux(推荐使用Ubuntu)、macOS或Windows(需要使用WSL),官方文档使用的Ubuntu LTS 版本中进行开发和测试,所以最好是在Ubuntu TLS版本环境下进行开发

    • • 内存:建议至少16GB RAM

    • • 存储空间:建议至少200GB可用空间,只下载源码可能200G,如果需要编译源码则建议至少500G空间

  2. 2. 安装所需软件:

    • • JDK(Java Development Kit):确保安装JDK 8或更高版本。

    • • Git:用于从AOSP仓库下载源代码。

    • • Repo:用于管理多个Git仓库的工具。

下载AOSP源码

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

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

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

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

  1. 1. 创建一个工作目录,用于存储AOSP源代码。打开终端或命令提示符窗口,并执行以下命令:

   mkdir AOSP
   cd AOSP
  1. 1. 初始化Repo工具。执行以下命令:

   repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

这里会提示无法连接到 http://gerrit.googlesource.com,需要我们修改一下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. 1. 同步源码。执行以下命令:

   repo sync
  1. 1. 等待源码同步完成。这可能需要一段时间,取决于您的网络连接和计算机性能。

配置编译环境

  1. 1. 进入AOSP源码目录。执行以下命令:

   cd <path-to-aosp>
  1. 1. 配置编译环境。执行以下命令:

   source build/envsetup.sh
  1. 1. 选择目标设备。执行以下命令:

   lunch
  1. 1. 在菜单中选择目标设备的编号,并按Enter键确认。

开始编译

  1. 1. 执行以下命令开始编译整个AOSP源码:

   make -j<number-of-cores>
  • • <number-of-cores>是您计算机处理器核心数的数字。例如,如果您的计算机有4个核心,则可以使用make -j4

  1. 1. 等待编译完成。这可能需要几个小时,取决于您的计算机性能。

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

  1. 1. 编译完成后,在AOSP源码目录中执行以下命令以获取系统镜像:

   cd <path-to-aosp>
   out/target/product/<device-name>/
  1. 1. 在该目录下,您将找到生成的系统镜像文件。

AOSP源码查看

Code Search

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

https://cs.android.com/

Android Studio导入

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

$ 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脚本可调用:

#!/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包

./build.sh -UKAu

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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android AOSP 源码的 device 目录下添加自定义的 framework 模块的步骤如下: 1. 创建新的模块目录: 在 device/{vendor_name}/{device_name}/ 目录下创建一个新的子目录,用于存放自定义的 framework 模块。例如,可以创建一个名为 myframework 的目录: ``` mkdir -p device/{vendor_name}/{device_name}/myframework ``` 2. 添加 Android.mk 文件: 在 myframework 目录下创建一个名为 Android.mk 的文件,用于定义自定义的 framework 模块。例如,可以添加以下代码: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := myframework LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_SRC_FILES := MyFramework.java LOCAL_SDK_VERSION := current LOCAL_JAVA_LIBRARIES := core-libart LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 LOCAL_STATIC_ANDROID_LIBRARIES := libsqlite include $(BUILD_JAVA_LIBRARY) ``` 其中: - LOCAL_MODULE 定义了模块名称; - LOCAL_MODULE_TAGS 定义了模块的标签,optional 表示该模块是可选的; - LOCAL_MODULE_CLASS 定义了模块的类型,JAVA_LIBRARIES 表示该模块是一个 Java 库; - LOCAL_SRC_FILES 定义了该模块中包含的 Java 源代码文件; - LOCAL_JAVA_LIBRARIES 定义了该模块所依赖的 Java 库; - LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_STATIC_ANDROID_LIBRARIES 定义了该模块所依赖的静态库和 Android 库。 3. 添加 Android.bp 文件: 在 myframework 目录下创建一个名为 Android.bp 的文件,用于定义自定义的 framework 模块。例如,可以添加以下代码: ``` java_library { name: "myframework", srcs: ["MyFramework.java"], static_libs: [ "core-libart", "android-support-v4", ], shared_libs: [ "libsqlite", ], sdk_version: "current", installable: true, } ``` 其中: - name 定义了模块名称; - srcs 定义了该模块中包含的 Java 源代码文件; - static_libs 定义了该模块所依赖的静态库; - shared_libs 定义了该模块所依赖的共享库; - sdk_version 定义了该模块所需的 Android SDK 版本; - installable 定义了该模块是否可安装。 4. 编译 Android 系统: 在编译 Android 系统之前,需要先执行以下命令: ``` source build/envsetup.sh ``` 然后编译 Android 系统: ``` lunch {device_name}-{build_type} make -j{n} ``` 其中 {device_name} 是设备名称,{build_type} 是编译类型(如 userdebug),{n} 是编译线程数。 编译完成后,就可以在 Android 系统中使用自定义的 framework 模块了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值