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源代码。打开终端或命令提示符窗口,并执行以下命令:
   mkdir AOSPcd AOSP
  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. 同步源码。执行以下命令:
   repo sync
  1. 等待源码同步完成。这可能需要一段时间,取决于您的网络连接和计算机性能。

配置编译环境

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

开始编译

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

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

  1. 编译完成后,在AOSP源码目录中执行以下命令以获取系统镜像:
   cd <path-to-aosp>out/target/product/<device-name>/
  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编译过程可能需要一些时间和计算机资源,建议在充足的时间和性能条件下进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】—— C++的IO流

在C中&#xff0c;I/O流是一项关键的编程概念&#xff0c;为程序提供了与外部世界进行交互的重要手段。通过使用C的强大I/O库&#xff0c;开发者能够实现对标准输入输出、文件、字符串等多种数据源的高效处理。接下来让我们深入探讨C的I/O流&#xff0c;了解其基本原理、常见操…

浏览器插件:WebScraper基本用法和抓取页面内容(不会编程也能爬取数据)

Web Scraper 是一个浏览器扩展&#xff0c;用于从页面中提取数据(网页爬虫)。对于简单或偶然的需求非常有用&#xff0c;例如正在写代码缺少一些示例数据&#xff0c;使用此插件可以很快从类似的网站提取内容作为模拟数据。从 Chrome 的插件市场安装后&#xff0c;页面 F12 打开…

RT-Thread experimental 代码学习(1)thread_sample

RTOS的最基础功能是线程。 线程的调度是如何工作的&#xff1f;RT-thread官方的实验文档是最好的参考。 老规矩&#xff0c;先放法国人doxygen。 thread_sample 代码的调用关系图 有意思的是&#xff0c;RT有两种创建线程的方式 - 静态和动态&#xff0c;粗略的理解是&…

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

数字图像处理期末速成笔记

目录 一、基础知识二、相邻像素间基本关系三、图像增强方法1、直方图求解2、直方图均衡化3、直方图规定化4、图像平滑5、邻域平均法&#xff08;线性&#xff09;6、 中值滤波法&#xff08;分线性&#xff09;7、中值滤波与领域平均的异同8、4-邻域平滑法9、超限像素平滑法10、…

我们应该了解的⽤户画像

当我们谈⽤户画像时&#xff0c;到底在谈什么 对于互联⽹公司来说&#xff0c;企业的增⻓、内容、活动、产品等⼯作基本上都是围绕着“⽤户”来做的&#xff0c;可以说都是在做“⽤户运营”这个⼯作&#xff0c;⽽⽤户画像是⽤户运营⼯作中⾮常重要的⼀环 ⽤户画像的主要特征是…

【js】js 异步机制详解 Generator / Async / Promise

三种语法功能放在一起&#xff0c;是因为他们都有相似特点&#xff1a; 维护某种状态在未来恢复状态并执行 本文重点回答以下几个问题&#xff1a; 为什么 Generator 和 Async 函数的 代码执行流 都可以简化成树形结构&#xff1f;async 函数为什么返回一个 promise&#xf…

Cloudreve存储策略-通过从机存储来拓展容量

Sham的云服务器是搬瓦工最低低低配的&#xff0c;1H 0.5G不说&#xff0c;硬盘容量也只有10g&#xff0c;说实话&#xff0c;装了宝塔面板和服务器套件后&#xff0c;基本满了&#xff0c;这时又想在云服务器上打个网盘用于下载、存储&#xff0c;这时就需要拓展硬盘&#xff0…

【podman】podman学习

Podman 官网 快速开始 面向 Docker 用户的 Podman 和 Buildah Podman是一个开源的容器、pod和容器映像管理引擎。Podman使查找、运行、构建和共享容器变得容易。 Podman Desktop是Podman的图形应用程序&#xff0c;使其易于在Windows、MacOS和Linux上安装和使用Podman&…

烟火检测AI边缘计算智能分析网关V4如何通过ssh进行服务器远程运维

智能分析网关V4是一款高性能、低功耗的AI边缘计算硬件设备&#xff0c;它采用了BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz&#xff0c;并且INT8峰值算力高达17.6Tops&#xff0c;FB32高精度算力达到2.2T&#xff0c;每个摄像头可同时配置3种算法&…

Fiddler基础使用指南

1. Fiddler介绍 Fiddler 是一款抓包工具&#xff0c;可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作&#xff0c;也可以用来检测网络安全 2. 设置过滤 通过设置过滤条件&#xff0c;可以使抓包工具过滤掉非目标包 3. 删除数据 被抓取的包可以进行手动删除 …

使用aspera下载SRA数据速度高达 下载中国gsa数据? ascp

转载自&#xff1a;秘籍 | 惊了&#xff0c;使用aspera下载SRA数据速度高达 291Mb/s - 简书 一、安装Aspera Connect 安装Linux版的Aspera Connect # 上面链接是最新版&#xff0c;因此下载的时候去官网复制最新的链接地址下载&#xff0c;否则可能会报错 wget https://d3gcli…

54 C++ 多线程 条件变量 condition_variable,wait(),notify_one()

一 前提&#xff1a;之前代码的缺陷 在前面我们使用两个线程 &#xff0c;一个线程读&#xff0c;一个线程写来完成对于共享数据访问。 我们把这个代码 先放在这里&#xff0c;方便回忆&#xff0c;然后说明代码可能存在的问题&#xff0c;然后改动。 class Teacher174 { pri…

Elasticsearch Index Shard Allocation 索引分片分配策略

Elasticsearch 索引分片的分配策略说明 在上一篇《索引生命周期管理ILM看完不懂你锤我 》&#xff08;https://mp.weixin.qq.com/s/ajhFp-xBU1dJm8a1dDdRQQ&#xff09;中&#xff0c;我们已经学会了索引级别的分片分配过滤属性&#xff0c;也就是在配置文件中指定当前节点的属…

牛客刷题之字符串

文章目录 字符串的长度(len)字符串的大小写删除字符串的指定字符字符串的重复输出&#xff08;不用循环语句&#xff09;字符的指定长度的输出&#xff08;切片&#xff09;字符串分隔 字符串的长度(len) str input()print(len(str))字符串的大小写 upper()全部大写 , lower()…

基于JavaWeb+SSM+Vue基于微信小程序的网上商城系统的设计和实现

基于JavaWebSSMVue基于微信小程序的网上商城系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想…

一步一步写线程之五线程池的模型之一领导者追随者模型

一、线程池的模型 在学习过相关的多线程知识后&#xff0c;从更抽象的角度来看待多线程解决问题的方向&#xff0c;其实仍然是典型的生产和消费者的模型。无论是数据计算、存储、分发和任务处理等都是通过多线程这种手段来解决生产者和消费者不匹配的情况。所以&#xff0c;得…

软件测试的工作描述

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

蓝桥杯官网题目:2.包子凑数

链接:题目点这里 首先要知道一个数学定理裴蜀定理&#xff0c;还有完全背包的基本运用&#xff0c;这里只介绍前者 也可以看一下我的个人理解&#xff0c;我是第一次听说这个定理&#xff0c;理解可能有误差。 假设gcd(a,b)d,gcd是最大公约数的意思。即a&#xff0c;b的最大…

fabric.js 组件 图片上传裁剪并进行自定义区域标记

目录 0. 前言 1. 安装fabric与引入 2. fabric组件的使用 3. 属性相关设置 4. 初始化加载 4. 方法 5. 全代码 0. 前言 利用fabric组件&#xff0c;实现图片上传、图片”裁剪“、自定义的区域标记一系列操作 先放一张效果图吧&#x1f447; 1. 安装fabric与引入 npm i …